上传Object
更新时间:2023-01-04
上传Object
简单上传
-
基本流程
- 创建BosClient。
- 调用putObject()方法,可以通过如下四种方式上传Object:字符串、DataUrl、文件和blob对象的形式。
-
示例代码
function done(response) { // 上传完成 } function fail(fail) { // 上传失败 } // 以字符串形式上传 client.putObjectFromString(bucket, object, 'hello world') .then(done) .catch(fail); // 以buffer形式上传 var buffer = new Buffer('hello world'); client.putObject(bucket, object, buffer) .then(done) .catch(fail); // 以文件形式上传,仅支持Node.js环境 client.putObjectFromFile(bucket, object, <path-to-file>) .then(done) .catch(fail); // 以blob对象形式上传,仅支持浏览器环境 client.putObjectFromBlob(bucket, object, <blob对象>) .then(done) .catch(fail);
说明:Object以文件的形式上传到BOS中,putObject函数支持不超过5GB的Object上传。在putObject请求处理成功后,BOS会在Header中返回Object的ETag作为文件标识。
追加上传
上文介绍的简单上传方式,创建的Object都是Normal类型,用户不可再进行追加写,这在日志、视频监控、视频直播等数据复写较频繁的场景中使用不方便。
正因如此,百度智能云BOS特别支持了AppendObject,即以追加写的方式上传文件。通过AppendObject操作创建的Object类型为Appendable Object,可以对该Object追加数据。AppendObject大小限制为0~5G。
let bucketName = "yourbucket";
let appendKey = "appendObjectKey";
// 首次上传时,offset设置为null
client.appendObjectFromString(bucketName,appendKey,"firstContent",null)
.then(function(response){
// 从响应头中获取offset偏移量
var offset = + response.http_headers['x-bce-next-append-offset'];
// 第二次追加上传时,指定上面获取到的offset传入
client.appendObjectFromString(bucketName, appendKey, "appendContent", offset);
});
设定Object的Http Header和自定义Meta数据
SDK本质上是调用后台的HTTP接口,因此BOS服务允许用户自定义Http Header。同时也允许用户对要上传的Object添加自定义Meta信息。以putObjectFromFile()函数为例,可以用以下代码来处理:
-
示例代码
let options = { 'Content-Length': <file.size>, // 添加http header 'Content-Type': 'application/json', // 添加http header 'Cache-Control': 'public, max-age=31536000', // 指定缓存指令 'Content-Disposition': 'attachment; filename="example.jpg"', // 指示回复的内容该以何种形式展示 'x-bce-meta-foo1': 'bar1', // 添加自定义meta信息 'x-bce-meta-foo2': 'bar2', // 添加自定义meta信息 'x-bce-meta-foo3': 'bar3' // 添加自定义meta信息 } client.putObjectFromFile(bucket, object, <path-to-file>, options) .then(done) .catch(fail);
注意:自定义Meta信息的key需要以
x-bce-meta-
开头。
获取上传进度
JavaScript SDK支持在上传过程中实时提供上传进度信息,可通过监听process事件获取相关信息,所有上传相关接口均支持该功能。
-
示例代码:以putObjectFromBlob接口为例
// 以blob对象形式上传,仅支持浏览器环境 client.putObjectFromBlob(bucket, object, <blob对象>) .then(done) .catch(fail); client.on('progress', function() { // do something })