Fetch 接口
PUT Object – Fetch 接口用于从指定的源链接抓取资源,保存到指定的对象中。 Qingstor 对象存储在抓取时能够自动处理源链接服务器返回的 301/302/307 等重定向请求。
请求示例:
PUT /<object-name> HTTP/1.1 X-QS-Fetch-Source: <source site> Host: <bucket-name>.pek3a.qingstor.com Date: <date> Authorization: <authorization-string>
下面是使用 QingStor Golang SDK 的例子:
import ( "github.com/yunify/qingstor-sdk-go/config" qs "github.com/yunify/qingstor-sdk-go/service" ) configuration, err := config.New("ACCESS_KEY_ID", "SECRET_ACCESS_KEY") service, err := qs.Init(configuration) bucket, err := service.Bucket("test-bucket", "pek3a") inputArgs := qs.PutObjectInput{ XQSFetchSource: "http://img.example.com/blog.png", } bucket.PutObject("new_object", &inputArgs)
批量迁移工具 qscamel
qscamel 是把 HTTP(s) 形式的数据高效地批量迁移到 QingStor 的命令行工具。其输入可以是包含源链接的文件,也可以是其他对象存储平台的 Bucket 名称。更多介绍请参考 qscamel 文档。qscamel 已开源,请见 github 项目地址。
qscamel 有如下特点:
1.支持并行迁移,即同时迁移多个对象。
2.支持给迁移任务命名,用来继续迁移未完成的迁移任务。qscamel 会记录本次迁移任务中成功迁移的源链接。在退出后、重新执行时,qscamel 会跳过已经成功迁移的源链接,迁移剩下未完成的源链接。
3.支持灵活的覆盖模式。qscamel 默认进行增量迁移 (比较源站资源和 QingStor Bucket 中对象的最后更新时间),只迁移 Bucket 中已存在但未更新的对象,和 Bucket 中不存在的对象。但同时提供选项 “-i, –ignore-existing” 来忽略 QingStor Bucket 中已经存在的对象,及选项 “-o, –overwrite” 来强制覆盖 QingStor Bucket 中已经存在的对象。
4.支持指定日志文件。qscamel 默认输出到 stdout,可以指定输出到指定的日志文件。
下面给出 qscamel 的运行示例:
(1) 读取源站列表文件,进行批量迁移
(2) 退出后、重新执行时,根据记录文件,跳过成功迁移的源链接。示例跳过了成功迁移的两条源链接,只迁移 https://img3.doubanio.com/lpic/s29154751.jpg
(3) 下面演示 -i –ignore-existing 跳过迁移 Bucket 中已经存在的对象,和-n –dry-run
可以看到 Bucket 中已经有 3 个对象。 源站列表文件中,共有 4 个源链接。其中前 3 个在 Bucket 中已存在,使用 -i 选项时跳过了这 3 个。使用 -n 选项时,qscamel 会尝试运行,并输出运行结果,但不做实际迁移。