US3-PACK 一个将US3的多个文件打包成一个文件并上传到US3的工具。这篇文章将会分享如何通过打包服务将US3上指定路径下的文件打包,从而可以方便您将打包好的归档文件下载到本地。
工具的工作原理如下:
- 工具本身会拉起一个HTTP服务器
- 用户发送POST请求以提交打包任务,您会在请求的response中拿到最终将会生成的ZIP压缩包的Key
- 打包工具根据您提交的请求中的信息,将US3中的文件下载到本地,并进行打包
- 将本地打包好的ZIP压缩包上传到US3中
- 您可以根据第二条中获取的ZIP压缩包Key下载文件
我们这里假定您已经创建了云主机Uhost,并且在US3控制台上拿到了对应的令牌。
-
下载打包工具 工具包
-
将工具包解压缩
unzip US3-PACK.zip
-
修改工具中的server_conf.json配置文件,配置文件如下:
{ "log": { "LogDir": "logs", "LogPrefix": "zip_", "LogSuffix": ".log", "LogSize": 50, "LogLevel": "DEBUG" }, "http": { "Ip": "0.0.0.0", "Port": 80 }, //服务监听的端口和ip "us3_config": { "public_key":"xxxxxxxxxxxxxx", //Token中的公钥 "private_key":"xxxxxxxxxxxxxxxxx" //Token中的私钥 } }
-
执行
./US3-PACK
以启动服务,您也可以使用后台进程来执行该服务nohup ./US3-PACK &
-
此时您可以发送POST请求到服务的根url (例如http://xxx.xxx.xxx.xxx),请求参数有两种类型,分别对应指定某个前缀下的所有文件进行打包的任务,以及指定具体文件进行打包的任务。
注意,如果您申请的UHost云主机只有内网IP,那么请您在同一台云主机上,或者同一VPC内部发送打包的POST请求。
{
"action": "GetUFileZipRequest",
"prefix": "prefix",
"bucket_name":"BucketName",
"file_host":"internal-cn-sh2-01.ufileos.com"
}
其中:
-
action字段指定request类型
-
bucket_name对应您所需打包文件所在存储桶的桶名
-
prefix为您所需打包文件所在的前缀(文件夹)路径
-
file_host为您访问桶所使用的endpoint,请您参考 地域和域名
{
"action": "GetUFileZipByListRequest",
"file_list": "prefix/key1,prefix/key2,prefix/key3",
"bucket_name":"BucketName",
"file_host":"internal-cn-sh2-01.ufileos.com"
}
其中:
- file_list字段指定要打包的文件名,注意此处文件名包括文件的前缀,但不包括桶名
- 其他字段同上
我们在文件包中提供了请求的json示例,您可以在压缩包中找到event.json文件,根据上文中的请求格式以及您想要提交的打包任务情况来更改json中的内容,并在同一台云主机上通过这一命令进行测试:
curl -X POST -d@event.json localhost
在发送完请求后,您会在返回中收到压缩包的地址。请求返回格式如下:
{
"Action": "GetUFileZipByListRequest",
"prefix": "prefix",
"RetCode": 0,
"ErrMsg":"",
"Key":"output/xxxx-xxxx-xxxxx-xxxx-xxxxxxx.zip"
}
其中key字段即为打包请求处理完毕后,工具上传到US3中的压缩包的对象名
您可以通过logs/文件夹下的日志文件来查看任务是否完成
最后,您可以使用http客户端工具下载这一文件,例如:
wget http://bucket.internal-cn-sh2-01.ufileos.com/output/xxxx-xxxx-xxxxx-xxxx-xxxxxxx.zip
在使用1核1G内存的UHost主机,内网传输数据的情况下,打包55个20M文件(总大小1.15G),的时间大概为30S。