2个版本
使用旧的Rust 2015
0.1.1 | 2018年6月3日 |
---|---|
0.1.0 | 2018年6月3日 |
#31 in #pastebin
75KB
1.5K SLoC
简单的Pastebin服务器
关于
一个简单的多用途RESTful存储服务器,用Rust编写。它使用MongoDB作为存储后端,使用Iron网络框架进行Web相关操作,并使用highlight.js进行语法高亮。
运行服务
构建(cargo build
或cargo build --release
)或安装二进制文件(cargo install pastebind
)。然后只需使用--help
标志启动可执行文件(只生成一个可执行文件)来查看选项。基本上您需要指定MongoDB连接选项,HTML(及sh
)模板的路径(服务器仓库中的templates
文件夹)和服务器外部地址。
目前不支持干净退出,所以当您想要停止时只需终止进程即可。
用户体验
服务可以通过两种方式使用:通过REST API(和实现它的命令行工具)或通过您的浏览器。
唯一的区别在于下载粘贴。如果您使用某些命令行工具下载,数据(粘贴)将原样传递。但对于浏览器来说,情况不同:如果粘贴被视为文本(纯文本、bash脚本、C++代码等),则会向您展示一个带有语法高亮的漂亮HTML5页面。
注意请注意,浏览器是通过其用户代理来检测的,所以如果您在浏览器中禁用了用户代理的报告,该服务将视为您是REST API用户,并且不会为您提供漂亮的输出(仅针对粘贴,提交表单无论如何都将按预期工作)。
REST API
要上传数据(无论是文本还是文件),只需使用POST
或PUT
请求发送到/
即可。您还可以指定一个文件名作为URI段,例如/file.txt
。该服务将以包含粘贴ID的链接回复。该地址应用于以后的粘贴操作。
要指定过期日期,请将查询参数expires
添加到您的POST
(PUT
)请求中,值为您希望的数据过期日期(UTC)的Unix时间戳,例如:以下为2019年1月1日(UTC)的?expires=1546300800
。如果您未指定日期,它将设置为服务器的默认值(默认过期时间作为命令行参数传递给服务应用程序)。要使粘贴无时间限制地存储,您必须传递特殊值never
,如下所示:?expires=never
。
要下载数据,请发送一个GET
请求到/id
,其中id
是在上一步获得的粘贴ID。实际上,您不必专门获取ID,只需使用从POST
(PUT
)返回的链接即可。如果粘贴包含有关文件名的信息,服务将重定向请求到/id/file-name
,这样您就可以以正确的名称保存文件。顺便说一下,如果您想在使用wget
时利用此功能,请将--content-disposition
标志传递到您的命令中。
您还可以选择性地在GET
请求中提供所需的文件名,如/id/file-name
。
要删除一个粘贴,请发送一个DELETE
请求到/id
,并且该粘贴将被删除(如果存在的话)。
命令行界面
可以通过使用一些简单的命令行工具,如curl
或wget
来利用服务的REST API。服务提供了一个便利的脚本,要下载它,请向/paste.sh
URL发送一个GET
请求。或者您可以从Git仓库中获取它:[paste.sh](https://github.com/mexus/pastebin/blob/HEAD/bin/templates/paste.sh.tera),但不要忘记将{{prefix}}
占位符替换为网站地址(如https://example.com
)。
通过浏览器
主页—/
—代表一个文本上传表单。为了上传整个文件,特别是二进制文件,我建议使用CLI文件上传器。
在/readme
处有一个readme页面(在/
页面上也有链接)。
顺便说一下,浏览器和命令行客户端(通过用户代理检测)对GET
请求的处理方式不同:如果您从命令行请求粘贴,粘贴将以二进制形式提供,即其二进制表示形式,而如果您从浏览器访问页面,则对于文本类型的粘贴将渲染一个漂亮的页面。
性能
待定。
限制
目前,任何传入数据的硬限制为15兆字节。这个限制来自一个BSON文档大小,并为额外数据预留了一部分。
虽然在技术上可以在MongoDB中使用GridFS存储更大的数据块,但在此项目中尚未实现。但它在计划中 :)
依赖项
~25MB
~472K SLoC