node.js 前端直接分片上传文件与阿里云OSS的方法

打印 上一主题 下一主题

主题 868|帖子 868|积分 2614

办理题目:直接由用户上传文件至阿里云OSS,而非颠末中间件/后端
官方文档:分片上传 (aliyun.com)​​​​​​​​​​​
在官方文档中,提供的方法是由中间件上传至oss,调用了path库,但是在浏览器用户没有那么大的权限,我们关注到文档中此表:
类型参数说明必选参数name {String}Object完整路径,Object完整路径中不能包罗Bucket名称。file {String|File}表现文件路径或者HTML5文件。 在必选参数中除了提供path,还可以提供HTML5文件,也就是我们常说的file。
给出如下办理:
  1. const OSS = require('ali-oss');
  2. const path = require("path");
  3. let elm = document.getElementById('fileInput')
  4. uploadFile = null
  5. elm.onchange = function (e) {
  6.     let files = e.target.files
  7.     let uploadFile = files[0]
  8.     let render = new FileReader()
  9. const client = new OSS({
  10.   // yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
  11.   region: 'yourRegion',
  12.   // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
  13.   accessKeyId: 'yourAccessKeyId',
  14.   accessKeySecret: 'yourAccessKeySecret',
  15.   // 填写Bucket名称,例如examplebucket。
  16.   bucket: 'examplebucket',
  17. });
  18. const progress = (p, _checkpoint) => {
  19.   // Object的上传进度。
  20.   console.log(p);
  21.   // 分片上传的断点信息。
  22.   console.log(_checkpoint);
  23. };
  24. const headers = {  
  25.   // 指定Object的存储类型。
  26.   'x-oss-storage-class': 'Standard',
  27.   // 指定Object标签,可同时设置多个标签。
  28.   'x-oss-tagging': 'Tag1=1&Tag2=2',
  29.   // 指定初始化分片上传时是否覆盖同名Object。此处设置为true,表示禁止覆盖同名Object。
  30.   'x-oss-forbid-overwrite': 'true'
  31. }
  32. async function multipartUpload() {
  33.   try {
  34.     const result = await client.multipartUpload('exampledir/exampleobject.txt', uploadFile, {
  35.       progress,
  36.       meta: {
  37.         year: 2020,
  38.         people: 'test',
  39.       },
  40.     });
  41.     console.log(result);
  42.     const head = await client.head('exampledir/exampleobject.txt');
  43.     console.log(head);
  44.   } catch (e) {
  45.     if (e.code === 'ConnectionTimeoutError') {
  46.       console.log('TimeoutError');
  47.       // do ConnectionTimeoutError operation
  48.     }
  49.     console.log(e);
  50.   }
  51. }
  52. multipartUpload();
复制代码
之后调用multipartUpload()即可。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表