本文介绍使用OSS Node.js SDK的常见问题及解决方法。

如何进行HTTPS访问

初始化SDK时指定secure的值为true,则默认通过HTTPS访问。

如何获取上传进度

使用分片上传时,可通过progress参数获取上传进度。

如何获取下载进度

Node.js SDK中可根据下载流的大小来计算进度。

如何上传base64编码的图片

将base64内容转换成File对象,再调用接口上传至OSS服务器。

 function dataURLtoFile(dataurl, filename) {
    let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
      bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
      u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], filename, {type:mime});
  }

  let file = dataURLtoFile('base64 content', '');

  client.multipartUpload('oss file name', file).then( (res)=> {
    console.log(res)
  }).catch((err) => {
    console.log(err)
  });
            

如何上传文件到指定目录

给要上传的Object名称前加指定目录前缀即可。更多信息,可参见OSS 和文件系统对比

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

client.multipartUpload('base-dir/' +'object-name', 'local-file', {
    progress: async function (p) {
      console.log('Progress: ' + p);
    }
  });
  console.log(result);
}).then((res) => {
  console.log(res)
}). catch((err) => {
  console.log(err);
});            

如何获取Object的签名URL

您可以调用signatureUrl方法,获取下载地址。更多信息,可参见GitHub示例

下载Object超过1 GB报错Response timeout for 60000ms, please increase the timeout or use multipartDownload.

Node.js SDK默认下载操作的超时时间为60000ms。当您下载Object超过1 GB时出现超时报错时,请使用流式下载的方式下载Object,并适当提高timeout配置项的超时时间。关于timeout配置项的更多信息,请参见配置项