全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
对象存储 OSS

上传文件

更新时间:2018-04-10 13:44:19

用户可以通过以下方式向OSS中上传文件:

  • 上传本地文件
  • 上传Buffer内容
  • 分片上传

上传本地文件

请直接参考分片上传

上传Buffer内容

用户也可以通过put接口简单地将Buffer中的内容上传到OSS:

  1. var co = require('co');
  2. var OSS = require('ali-oss');
  3. var client = new OSS({
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. });
  9. co(function* () {
  10. var result = yield client.put('object-key', new Buffer('hello world'));
  11. console.log(result);
  12. }).catch(function (err) {
  13. console.log(err);
  14. });

分片上传

在需要上传的文件较大时,可以通过multipartUpload接口进行分片上传。分片上传的好处是将一个大请求分成多个小请求来执行,这样当其中一些请求失败后,不需要重新上传整个文件,而只需要上传失败的分片就可以了。一般对于大于100MB的文件,建议采用分片上传的方法,每次进行分片上传都建议重新new一个新的OSS实例。
相关参数:

  • name {String} object 名称
  • file {File} HTML5 Web File
  • [options] {Object} 额外参数
    • [checkpoint] {Object} 断点记录点,可以进行断点续传, 如果设置这个参数,上传会从断点开始,如果没有设置,就会重新上传.
      • file {File} 用户选取的文件对象,如果浏览器重启后这个需要用户手动触发进行设置
      • name {String} 上传的object key
      • fileSize {Number} 文件大小
      • partSize {Number} 分片大小
      • uploadId {String} 分片上传的ID
      • doneParts {Array} 已完成的分片的数组, 包含的对象结构如下
        • number {Number} 分片的number
        • etag {String} 分片的etag
    • [partSize] {Number} 分片大小
    • [progress] {Function} thunk 或 generator形式, 回调函数包含三个参数
      • (percentage {Number} 进度百分比(0-1之间小数)
      • checkpoint {Object} 断点记录点
      • res {Object}) 单次part成功返回的response
    • [meta] {Object} 用户自定义header meta信息, header前缀 x-oss-meta-
    • [headers] {Object} http 额外的头字段, 详情请看 RFC 2616
      • ‘Cache-Control’ 通用消息头被用于在http 请求和响应中通过指定指令来实现缓存机制, e.g.: Cache-Control: public, no-cache
      • ‘Content-Disposition’ 指示回复的内容该以何种形式展示,是以内联的形式(即网页或者页面的一部分),还是以附件的形式下载并保存到本地, e.g.: Content-Disposition: somename
      • ‘Content-Encoding’ 用于对特定媒体类型的数据进行压缩, e.g.: Content-Encoding: gzip
      • ‘Expires’ 过期时间, e.g.: Expires: 3600000
  1. var co = require('co');
  2. var OSS = require('ali-oss')
  3. var client = new OSS({
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. });
  9. co(function* () {
  10. var result = yield client.multipartUpload('object-key', 'local-file', {
  11. progress: function* (p) {
  12. console.log('Progress: ' + p);
  13. },
  14. meta: {
  15. year: 2017,
  16. people: 'test'
  17. },
  18. mime: 'image/jpeg'
  19. });
  20. console.log(result);
  21. var head = yield client.head('object-key');
  22. console.log(head);
  23. }).catch(function (err) {
  24. console.log(err);
  25. });

上面的progress参数是一个进度回调函数,用于获取上传进度。progress可以是一个generator function(function*),也可以是一个”thunk”:

  1. var progress = function (p) {
  2. return function (done) {
  3. console.log(p);
  4. done();
  5. };
  6. };

上面的meta参数是一个用户自定义的元数据,通过head接口可以获取到object的meta数据,但是这个meta header 需要在控制台跨域设置里边的暴露header中设置好,如图:meta 设置请求成功后的返回结果展示:结果展示

暂停分片上传

  1. 分片上传暂停后,恢复上传时需要将之前记录的checkpoint参数传入即可.
  2. 每次进行分片上传建议重新new一个新的OSS实例.
  1. var co = require('co');
  2. var OSS = require('ali-oss')
  3. var ossConfig = {
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. }
  9. var client = new OSS(ossConfig);
  10. var tempCheckpoint;
  11. co(function* () {
  12. var result = yield client.multipartUpload('object-key', 'local-file', {
  13. progress: function* (p, checkpoint) {
  14. // 记录断点, 如果关闭了浏览器,然后重新启动继续上传的话,是不行的,请参考上边对file对象的描述
  15. tempCheckpoint = checkpoint;
  16. }
  17. })
  18. }
  19. // 暂停分片上传方法
  20. client.cancel();
  21. // 恢复上传
  22. var resumeclient = new OSS(ossConfig);
  23. co(function* () {
  24. var result = yield resumeclient.multipartUpload('object-key', 'local-file', {
  25. progress: function* (p, checkpoint) {
  26. tempCheckpoint = checkpoint;
  27. },
  28. checkpoint: tempCheckpoint
  29. })
  30. }
本文导读目录