通过putStream接口将文件流、网络流等数据流上传到存储空间(Bucket)中的文件(Object)。本文以文件流为例介绍如何进行流式上传。

说明 stream参数可以是任何实现了Readable Stream的对象,包含文件流,网络流等。

以下代码用于将文件流上传到目标存储空间examplebucket中exampledir目录下的exampleobject.txt文件。

let OSS = require('ali-oss');
let fs = require('fs');

let client = new OSS({
  // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  region: 'yourRegion',
  // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  accessKeyId: 'yourAccessKeyId',
  accessKeySecret: 'yourAccessKeySecret',
  // 填写Bucket名称,例如examplebucket。
  bucket: 'examplebucket',
});

async function putStream () {
  try {
    // 使用'chunked encoding'。使用putStream接口时,SDK默认会发起一个'chunked encoding'的HTTP PUT请求。
    // 填写本地文件的完整路径,从本地文件中读取数据流。
    // 如果本地文件的完整路径中未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
    let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
    // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
    let result = await client.putStream('exampledir/exampleobject.txt', stream);
    console.log(result);

    // 不使用'chunked encoding'。如果在options指定了contentLength参数,则不会使用chunked encoding。
    let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
    let size = fs.statSync('D:\\localpath\\examplefile.txt').size;
    let result = await client.putStream(
    'exampledir/exampleobject.txt', stream, {contentLength: size});
    console.log(result);
  } catch (e) {
    console.log(e)
  }
}

putStream();