QingStor 对象存储支持 Fetch 接口和批量迁移工具 qscamel

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)

具体使用请参考文档和相应的 SDK

 

批量迁移工具 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 会尝试运行,并输出运行结果,但不做实际迁移。