Object

上传Object

最简单的上传

  • 基本流程

    1. 创建BosClient。
    2. 调用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的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
    
      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-开头。

查看Bucket中的Object

简单查询

查看Bucket中Object列表。

  • 基本流程

    1. 创建BosClient。
    2. 执行listObjects()方法。
  • 示例代码

    client.listObjects(<bucketName>)
      .then(function (response) {
          var contents = response.body.contents;
          for (var i = 0, l = contents.length; i < l; i++) {
              console.log(contents[i].key);
          }
      })
      .catch(function (error) {
          // 查询失败
      });
    

    注意:

    • 默认情况下,如果Bucket中的Object数量大于1000,则只会返回1000个Object,并且返回结果中IsTruncated值为True,并返回NextMarker做为下次读取的起点。

    • 若想获取更多的Object,可以使用Marker参数分次读取,请参考扩展查询

扩展查询

用户可以通过设置listObjects参数来完成更多扩展查询操作设置。可以设置的扩展参数如下:

参数名称 说明 默认值
maxKeys 设定此次返回Object的最大个数,不可超过1000。 1000
prefix 设定objectKey的前缀,前缀是指objectKey包含并以prefix的值作为开始。
通常与delimiter配合在查询模拟文件夹中使用。
-
delimiter 是一个分隔符,用来对objectKey进行分层。
通常与prefix配合在查询模拟文件夹中使用。
从prefix开始到第一次出现delimiter字符之间的objectKey称为:commonPrefixes。
-
marker 是一个字符串,用来设定返回结果的起始位置。
设定marker值之后,返回的Object会从marker值之后按字母排序开始返回。
-
  • 示例代码

    // 设置参数
    var options = {
        delimiter: '/',
        marker: '123'
    };
    
    client.listObjects(<bucketName>, options)
        .then(function (response) {
            var contents = response.body.contents;
            for (var i = 0, l = contents.length; i < l; i++) {
                console.log(contents[i].key);
            }
        })
        .catch(function (error) {
            // 查询失败
        });
    

查询模拟文件夹

由于BOS本身是一个(<Key>,<Value>)的存储系统,所以原则上并不会存在“文件夹”的概念,但您可以通过 delimiterprefix 参数的配合进行文件夹功能模拟。

假设Bucket中有5个文件:bos.jpg,fun/,fun/test.jpg,fun/movie/001.avi,fun/movie/007.avi,可以把 “/” 符号作为分隔符模拟文件夹。

递归列出模拟文件夹下所有文件

可以通过设置 Prefix 参数来获取某个模拟文件夹下所有的文件:

// 设置参数
let options = {
prefix: 'fun/' // 递归列出fun目录下的所有文件
};


client.listObjects(<bucketName>, options)
.then(function (response) {
    console.log('Objects:');
    var contents = response.body.contents;
    for (var i = 0, l = contents.length; i < l; i++) {
        console.log(contents[i].key);
    }
})
.catch(function (error) {
    // 查询失败
});

输出:

Objects:
fun/
fun/movie/001.avi
fun/movie/007.avi
fun/test.jpg

查看模拟文件夹下的文件和子文件