Skip to content

Commit

Permalink
support uploading acceleration
Browse files Browse the repository at this point in the history
  • Loading branch information
bachue committed Oct 11, 2024
1 parent 9fab1c7 commit 02f2c99
Show file tree
Hide file tree
Showing 9 changed files with 38 additions and 23 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# 2.16.0
## 新增
1. create-share / share-ls / share-cp 命令支持创建对文件夹的共享,列举和下载
2. 上传命令支持额外的 accelerate 选项

## 更新
1. listbucket2 现在即使使用了 --limit 参数得到的 marker 也是精确的
Expand Down
4 changes: 4 additions & 0 deletions cmd/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ var upload2CmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
cmd.Flags().StringVar(&info.SkipFixedStrings, "skip-fixed-strings", "", "skip files with the fixed string in the name")
cmd.Flags().StringVar(&info.SkipSuffixes, "skip-suffixes", "", "skip files with these suffixes")
cmd.Flags().StringVar(&info.UpHost, "up-host", "", "upload host")
cmd.Flags().BoolVarP(&info.Accelerate, "accelerate", "", false, "enable uploading acceleration")
cmd.Flags().StringVar(&info.RecordRoot, "record-root", "", "record root dir, and will save record info to the dir(db and log), default <UserRoot>/.qshell")
cmd.Flags().StringVar(&LogFile, "log-file", "", "log file")
cmd.Flags().StringVar(&LogLevel, "log-level", "debug", "log level")
Expand Down Expand Up @@ -146,6 +147,7 @@ var syncCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
cmd.Flags().BoolVarP(&info.UseResumeV2, "resumable-api-v2", "", false, "use resumable upload v2 APIs to upload")
cmd.Flags().Int64VarP(&info.ChunkSize, "resumable-api-v2-part-size", "", data.BLOCK_SIZE, "the part size when use resumable upload v2 APIs to upload, default 4M")
cmd.Flags().StringVarP(&info.UpHost, "up-host", "u", "", "upload host")
cmd.Flags().BoolVarP(&info.Accelerate, "accelerate", "", false, "enable uploading acceleration")

cmd.Flags().IntVarP(&info.FileType, "file-type", "", 0, "set storage type of file, 0:STANDARD storage, 1:IA storage, 2:ARCHIVE storage, 3:DEEP_ARCHIVE storage, 4:ARCHIVE_IR storage")
cmd.Flags().IntVarP(&info.FileType, "storage", "s", 0, "set storage type of file, same to --file-type")
Expand Down Expand Up @@ -203,6 +205,7 @@ var formUploadCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {
_ = cmd.Flags().MarkDeprecated("storage", "use --file-type instead") // 废弃 storage

cmd.Flags().StringVarP(&info.UpHost, "up-host", "u", "", "uphost")
cmd.Flags().BoolVarP(&info.Accelerate, "accelerate", "", false, "enable uploading acceleration")

cmd.Flags().StringVarP(&info.Policy.EndUser, "end-user", "", "", "Owner identification")
cmd.Flags().StringVarP(&info.Policy.CallbackURL, "callback-urls", "l", "", "upload callback urls, separated by comma")
Expand Down Expand Up @@ -262,6 +265,7 @@ var resumeUploadCmdBuilder = func(cfg *iqshell.Config) *cobra.Command {

cmd.Flags().IntVarP(&info.ResumeWorkerCount, "worker", "c", 3, "worker count")
cmd.Flags().StringVarP(&info.UpHost, "up-host", "u", "", "uphost")
cmd.Flags().BoolVarP(&info.Accelerate, "accelerate", "", false, "enable uploading acceleration")

cmd.Flags().StringVarP(&info.Policy.EndUser, "end-user", "", "", "Owner identification")
cmd.Flags().StringVarP(&info.Policy.CallbackURL, "callback-urls", "l", "", "upload callback urls, separated by comma")
Expand Down
7 changes: 4 additions & 3 deletions docs/fput.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ qshell fput [--overwrite] [--callback-urls <CallbackUrls>] [--callback-host <Cal
可以在命令行输入如下命令获取帮助文档:
```
// 简单描述
$ qshell fput -h
$ qshell fput -h
// 详细文档(此文档)
$ qshell fput --doc
Expand All @@ -27,8 +27,9 @@ $ qshell fput --doc
- Bucket:空间名,可以为公开空间或私有空间【必选】
- Key:文件保存在七牛空间的名称 【必选】
- LocalFile:本地文件的路径【必选】

# 选项
- --accelerate:启用上传加速。【可选】
- --overwrite:是否覆盖空间已有文件,默认为 `false`。 【可选】
- -t/--mimetype:指定文件的 MimeType。 【可选】
- --file-type:文件存储类型,默认为 `0`(标准存储),`1` 为低频存储,`2` 为归档存储,`3` 为深度归档存储,`4` 为归档直读存储。 【可选】
Expand All @@ -52,7 +53,7 @@ $ qshell fput --doc
2) 检查 Key 扩展名;
3) 侦测内容。
3. 设为 -1 值,无论上传端指定了何值直接使用该值。
```
```
- --traffic-limit:上传请求单链接速度限制,控制客户端带宽占用。限速值取值范围为 819200 ~ 838860800,单位为 bit/s。【可选】


Expand Down
29 changes: 16 additions & 13 deletions docs/qupload.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ qshell qupload [-c <ThreadCount>] [--success-list <SuccessFileName>] [--failure-
可以在命令行输入如下命令获取帮助文档:
```
// 简单描述
$ qshell qupload -h
$ qshell qupload -h
// 详细文档(此文档)
$ qshell qupload --doc
Expand All @@ -25,6 +25,7 @@ $ qshell qupload --doc

# 选项
- -c/--worker:配置下载的并发协程数量(ThreadCount),默认为 1,即文件一个一个上传,对于大量小文件来说,可以通过提高该参数值来提升同步速度。关于 `ThreadCount` 的值,并不是越大越好,所以工具里面限制了范围 `[1, 2000]`(如果不在范围内则重置为 5),在实际情况下最好根据所拥有的上传带宽和文件的平均大小来计算下这个并发数,最简单的算法就是带宽除以平均文件大小即可得到并发数。 假设上传带宽有 10Mbps,文件平均大小 500KB,那么利用 10*1024/8/500 = 2.56,那么并发数差不多就是 3~6 左右。
- --accelerate:启用上传加速
- -s/--success-list:指定一个文件名字,导入上传成功的文件列表到该文件。
- -e/--failure-list:指定一个文件名字, 导入上传失败的文件列表到该文件。
- -w/--overwrite-list:指定一个文件名字, 导入存储空间中被覆盖的文件列表到该文件。
Expand Down Expand Up @@ -56,7 +57,8 @@ $ qshell qupload --doc
"log_stdout" : true,
"file_type" : 0,
"resumable_api_v2" : false,
"resumable_api_v2_part_size" : 4194304
"resumable_api_v2_part_size" : 4194304,
"uploading_acceleration" : true
}
```
参数说明:
Expand All @@ -83,10 +85,11 @@ $ qshell qupload --doc
- delete_on_success:上传成功的文件,同时删除本地文件,以达到节约磁盘的目的,比如日志归档的场景,默认为 `false`,如果需要开启功能,设置为 `true` 即可。【可选】
- resumable_api_v2:使用分片 V2 进行上传,默认为 `false` 使用分片 V1 。【可选】
- resumable_api_v2_part_size:使用分片 V2 进行上传时定制分片大小,默认 4194304(4M) 。【可选】
- uploading_acceleration:启用上传加速。【可选】
- put_threshold:上传阈值,上传文件大小超过此值会使用分片上传,不超过使用表单上传;单位:B,默认为 8388608(8M) 。【可选】
- sequential_read_file: 文件读为顺序读,不涉及跳读;开启后,上传中的分片数据会被加载至内存。此选项可能会增加挂载网络文件系统的文件上传速度。默认是:false。 【可选】
- record_root:上传记录信息保存路径,包括日志文件和上传进度文件;默认为 `qshell` 上传目录;【可选】
- 通过 `-L` 指定工作目录时,`record_root` 则为此工作目录/qdownload/$jobId,
- 通过 `-L` 指定工作目录时,`record_root` 则为此工作目录/qdownload/$jobId,
- 未通过 `-L` 指定工作目录时为 `用户目录/.qshell/users/$CurrentUserName/qdownload/$jobId`
- 注意 `jobId` 是根据上传任务动态生成;具体方式为 MD5("$SrcDir:$Bucket:$FileList"); `CurrentUserName` 当前用户的名称
- worker_count:分片上传中单个文件并发上传的分片数;默认为 3。【可选】
Expand All @@ -109,7 +112,7 @@ $ qshell qupload --doc
2) 检查 Key 扩展名;
3) 侦测内容。
3. 设为 -1 值,无论上传端指定了何值直接使用该值。
```
```
- traffic_limit:上传请求单链接速度限制,控制客户端带宽占用。限速值取值范围为 819200 ~ 838860800,单位为 bit/s。【可选】


Expand Down Expand Up @@ -184,9 +187,9 @@ See upload log at path /Users/jemy/.qshell/qupload/290438bcd0bcc7121bb22a56b1c95
- 有,查看本地文件时间戳是否变化,检测服务文件修改时间是否变化,
- 二者均未发生变化则认为文件未发生变化,不再上传
- 本地/服务文件任一文件时间戳发生变化,则触发上传

上传
- 是否配置检查文件是否存在(`check_exists`
- 是否配置检查文件是否存在(`check_exists`
- 未配置,直接上传
- 配置,查看文件是否配置检测 Hash(`check_hash`)。
- 配置检测 Hash,则检查本地文件 Hash 是否和服务 Hash 一致
Expand Down Expand Up @@ -242,10 +245,10 @@ demo2.gif

### 默认的上传入口
很多情况下,该工具的使用者的网络和七牛的网络都不是在一个内网,或者是机房或者是普通的办公网络和家庭网络。这种情况下,为了保证上传的速度和效率,必须走加速上传通道。目前本工具中使用的空间所在机房和对应的上传加速域名如下:
- 华东: http://upload.qiniu.com
- 华北: http://upload-z1.qiniu.com
- 华南: http://upload-z2.qiniu.com
- 北美: http://upload-na0.qiniu.com
- 华东: http://upload.qiniu.com
- 华北: http://upload-z1.qiniu.com
- 华南: http://upload-z2.qiniu.com
- 北美: http://upload-na0.qiniu.com
- 东南亚: http://upload-as0.qiniup.com

本工具会根据配置文件中指定的空间参数,自动获取所应该使用的默认加速域名,所以不需要担心是否需要额外设置上传域名。
Expand All @@ -255,10 +258,10 @@ demo2.gif
- 华东
- 上传加速域名:http(s)://upload.qiniup.com
- 源站上传域名:http(s)://up.qiniup.com
- 华北
- 华北
- 上传加速域名:http(s)://upload-z1.qiniup.com
- 源站上传域名:http(s)://up-z1.qiniup.com
- 华南
- 华南
- 上传加速域名:http(s)://upload-z2.qiniup.com
- 源站上传域名:http(s)://up-z2.qiniup.com
- 北美
Expand Down Expand Up @@ -325,7 +328,7 @@ demo2.gif

命令格式:
```
$ qshell qupload --success-list success.txt upload.conf
$ qshell qupload --success-list success.txt upload.conf
```
特别提示:由于这些选项所指定的文件在每次运行命令时,如果文件已存在,则已有内容会被清空然后写入新的内容,所以注意每次命令运行指定不同的文件。

Expand Down
3 changes: 2 additions & 1 deletion docs/qupload2.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ qshell qupload2 --src-dir=/home/jemy/temp --bucket=test
`qupload2``--check-hash` 选项含义可参考 `qupload``check_hash` 配置;

```
jemy•~» qshell qupload2 -h
jemy•~» qshell qupload2 -h
```

```
Expand All @@ -20,6 +20,7 @@ Usage:
qshell qupload2 [flags]
Flags:
--accelerate enable uploading acceleration
--bucket string bucket
--callback-body string upload callback body
-T, --callback-host string upload callback host
Expand Down
5 changes: 3 additions & 2 deletions docs/rput.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ qshell rput [--overwrite] [--v2] [--mimetype <MimeType>] [--callback-urls <Callb
可以在命令行输入如下命令获取帮助文档:
```
// 简单描述
$ qshell rput -h
$ qshell rput -h
// 详细文档(此文档)
$ qshell rput --doc
Expand All @@ -31,6 +31,7 @@ $ qshell rput --doc
- LocalFile:本地文件的路径。 【必选】

# 选项
- --accelerate:启用上传加速。【可选】
- --overwrite:是否覆盖空间已有文件,默认为 `false`。 【可选】
- -t/--mimetype:指定文件的 MimeType 。【可选】
- --file-type:文件存储类型;0: 标准存储, 1: 低频存储, 2: 归档存储, 3: 深度归档存储, 4: 归档直读存储;默认为`0`(标准存储)。 【可选】
Expand All @@ -56,7 +57,7 @@ $ qshell rput --doc
2) 检查 Key 扩展名;
3) 侦测内容。
3. 设为 -1 值,无论上传端指定了何值直接使用该值。
```
```
- --traffic-limit:上传请求单链接速度限制,控制客户端带宽占用。限速值取值范围为 819200 ~ 838860800,单位为 bit/s。【可选】

# 示例
Expand Down
7 changes: 4 additions & 3 deletions docs/sync.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ qshell sync <SrcResUrl> <Bucket> [-k <Key>]
可以在命令行输入如下命令获取帮助文档:
```
// 简单描述
$ qshell sync -h
$ qshell sync -h
// 详细文档(此文档)
$ qshell sync --doc
Expand All @@ -30,6 +30,7 @@ $ qshell sync --doc
- Bucket:空间名,可以为公开空间或者私有空间。 【必选】

# 选项
- --accelerate:启用上传加速。【可选】
- -k/--key:该资源保存在空间中的 key,不配置时使用资源 Url 中文件名作为存储的 key。 【可选】
- -u/--uphost:上传入口的 IP 地址,一般在大文件的情况下,可以指定上传入口的 IP 来减少 DNS 环节,提升同步速度。 【可选】
- --file-type:文件存储类型,默认为 `0` (标准存储),`1` 为低频存储,`2` 为归档存储,`3` 为深度归档存储,`4` 为归档直读存储【可选】
Expand All @@ -44,7 +45,7 @@ $ qshell sync --doc
- --persistent-ops:资源上传成功后触发执行的预转持久化处理指令列表。fileType=2或3(上传归档存储或深度归档存储文件)时,不支持使用该参数。支持魔法变量和自定义变量。每个指令是一个 API 规格字符串,多个指令用;分隔。【可选】
- --persistent-notify-url:接收持久化处理结果通知的 URL。必须是公网上可以正常进行 POST 请求并能成功响应的有效 URL。该 URL 获取的内容和持久化处理状态查询的处理结果一致。发送 body 格式是 Content-Type 为 application/json 的 POST 请求,需要按照读取流的形式读取请求的 body 才能获取。【可选】
- --persistent-pipeline:转码队列名。资源上传成功后,触发转码时指定独立的队列进行转码。为空则表示使用公用队列,处理速度比较慢。建议使用专用队列。【可选】
- --detect-mime:开启 MimeType 侦测功能,并按照下述规则进行侦测;如不能侦测出正确的值,会默认使用 application/octet-stream 。【可选】
- --detect-mime:开启 MimeType 侦测功能,并按照下述规则进行侦测;如不能侦测出正确的值,会默认使用 application/octet-stream 。【可选】
```
1. 设为 1 值,则忽略上传端传递的文件 MimeType 信息,并按如下顺序侦测 MimeType 值:
1) 侦测内容;
Expand All @@ -55,7 +56,7 @@ $ qshell sync --doc
2) 检查 Key 扩展名;
3) 侦测内容。
3. 设为 -1 值,无论上传端指定了何值直接使用该值。
```
```
- --traffic-limit:上传请求单链接速度限制,控制客户端带宽占用。限速值取值范围为 819200 ~ 838860800,单位为 bit/s。【可选】


Expand Down
3 changes: 2 additions & 1 deletion iqshell/storage/object/upload/operations/batch_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ type UploadConfig struct {
DisableForm bool `json:"disable_form,omitempty"`
WorkerCount int `json:"work_count,omitempty"` // 分片上传并发数
RecordRoot string `json:"record_root,omitempty"`
SequentialReadFile bool `json:"sequential_read_file"` // 文件顺序读
SequentialReadFile bool `json:"sequential_read_file"` // 文件顺序读
Accelerate bool `json:"uploading_acceleration"` // 开启上传加速

// 唯一属主标识。特殊场景下非常有用,例如根据 App-Client 标识给图片或视频打水印。
EndUser string `json:"end_user,omitempty"`
Expand Down
2 changes: 2 additions & 0 deletions iqshell/storage/object/upload/uploader.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ type ApiInfo struct {
CheckSize bool `json:"-"` // 是否检查文件大小,检查是会对比服务端文件大小
Overwrite bool `json:"-"` // 当遇到服务端文件已存在时,是否使用本地文件覆盖之服务端的文件
UpHost string `json:"up_host"` // 上传使用的域名
Accelerate bool `json:"upload_acceleration"` // 启用上传加速
TokenProvider func() string `json:"-"` // token provider
TryTimes int `json:"-"` // 失败时,最多重试次数【可选】
TryInterval time.Duration `json:"-"` // 重试间隔时间 【可选】
Expand Down Expand Up @@ -202,6 +203,7 @@ func uploadSource(info *ApiInfo) (*ApiResult, *data.CodeError) {
})
})
storageCfg := workspace.GetStorageConfig()
storageCfg.AccelerateUploading = info.Accelerate
var up Uploader
if utils.IsNetworkSource(info.FilePath) {
up = networkSourceUploader(info, storageCfg)
Expand Down

0 comments on commit 02f2c99

Please sign in to comment.