通过断点续传上传的方式将文件上传到OSS前,您可以指定断点记录点。上传过程中,如果出现网络异常或程序崩溃导致文件上传失败时,将从断点记录处继续上传未上传完成的部分。
实现方法
断点续传上传将要上传的文件分成若干个分片(Part)分别上传,所有分片都上传完成后,将所有分片合并成完整的文件,完成整个文件的上传。
您可以通过Bucket#resumable_upload
方法来实现断点续传上传。该方法包含以下参数:
参数 | 描述 | 是否必选 | 默认值 |
key | 上传至OSS的文件完整路径。 | 是 | 无 |
file | 待上传的本地文件完整路径。 说明 上传过程中如果本地文件ETag值发生变化,会导致上传失败。 | 是 | 无 |
:cpt_file | 指定用于记录断点信息的文件,您需要对该文件有写入权限。 说明
| 否 | 本地文件同目录下的 |
:disable_cpt | 上传过程中是否记录上传进度。取值如下:
| 否 | false |
:part_size | 指定每个分片的大小。 | 否 | 4 MB |
&block | 调用时传递了block,则上传进度会交由block处理。 | 否 | 无 |
示例代码
以下代码用于断点续传上传。
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
# Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
access_key_id: ENV['OSS_ACCESS_KEY_ID'],
access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# 填写Bucket名称,例如examplebucket。
bucket = client.get_bucket('examplebucket')
# key填写Object完整路径,Object完整路径中不能包含Bucket名称,例如exampledir/example.zip。
# file填写本地文件的完整路径,例如/tmp/example.zip。
bucket.resumable_upload('exampledir/example.zip', '/tmp/example.zip') do |p|
puts "Progress: #{p}"
end
bucket.resumable_upload(
'exampledir/example.zip', '/tmp/example.zip',
:part_size => 100 * 1024, :cpt_file => '/tmp/example.zip.cpt') { |p|
puts "Progress: #{p}"
}