分片上传
本文档介绍如何使用分片上传。
说明 以下示例代码中的 catch 语法,请自行学习 es6 promise、async/await。 SDK 的使用方式,请参考安装。
在需要上传的文件较大时,可以通过multipartUpload
接口进行分片上传。分片上传的好处是将一个大请求分成多个小请求来执行,这样当其中一些请求失败后,不需要重新上传整个文件,只需要上传失败的分片即可。对于大于 100MB 的文件,建议采用分片上传的方法。
在使用 multipartUpload 接口时如果遇到ConnectionTimeoutError
超时问题,业务方需要自行处理超时逻辑。您可以通过缩小分片大小、加大超时时间、重试请求或者捕获ConnectionTimeoutError
错误来分析具体原因。
相关参数说明如下:
- name {String} :object 名称
- file {String|File} :文件路径或者 HTML5 文件
- [options] {Object} :额外参数
- [checkpoint] {Object} :断点记录点。如果设置这个参数,上传会从断点开始,如果没有设置这个参数,则会重新上传
- [parallel] {Number}:并发上传的分片个数
- [partSize] {Number}:分片大小
- [progress] {Function}: async 函数形式。回调函数包含三个参数:
- percentage {Number}:进度百分比(0-1之间小数)
- checkpoint {Object}:断点记录点
- res {Object}:单个分片成功返回的 response
- [meta] {Object}:用户自定义 header meta 信息。header 前缀
x-oss-meta-
- [mime] {String}:设置 Content-Type 请求头
- [headers] {Object}:其他 headers,详情请参见RFC 2616
- 'Cache-Control':通用消息头被用在 http 请求和响应中通过指定指令来实现缓存机制。如
Cache-Control: public, no-cache
- 'Content-Disposition':指示回复的内容该以何种形式展示,是以网页预览的形式,还是以附件的形式下载并保存到本地。如
Content-Disposition: somename
- 'Content-Encoding':用于对特定媒体类型的数据进行压缩。如
Content-Encoding: gzip
- 'Expires':过期时间,单位为毫秒。如
Expires: 3600000
- 'Cache-Control':通用消息头被用在 http 请求和响应中通过指定指令来实现缓存机制。如
以下代码用于分片上传:
let OSS = require('ali-oss')
let client = new OSS({
region: '<Your region>',
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
bucket: '<Your bucket name>',
});
async function multipartUpload () {
try {
let result = await client.multipartUpload('object-name', 'local-file', {
progress,
meta: {
year: 2017,
people: 'test'
}
});
console.log(result);
let head = await client.head('object-name');
console.log(head);
} catch (e) {
// 捕获超时异常
if (e.code === 'ConnectionTimeoutError') {
console.log("Woops,超时啦!");
// do ConnectionTimeoutError operation
}
console.log(e)
}
}
说明
meta参数是一个用户自定义的元数据,通过 head 接口可以获取到 object 的 meta 数据。
const progress = async function (p) {
console.log(p);
};
说明
progress参数是一个进度回调函数,用于获取上传进度。
progress可以是一个 async 函数。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论