上传文件到阿里云OSS

淺唱寂寞╮ 提交于 2020-01-10 21:10:31
最近项目中有文件上传的功能,才发现阿里云oss真是个好东西。
在其中做了好多的权限设置,角色、子账户、bucket等等。
web端进行文件上传有多种方式
一、无需临时授权(安全性较低)

(一)、拿到权限直接上传

let arr = []
arr.push(fileListPermit[0].originFileObj)
   let result = client.put(fileListPermit[0].originFileObj.name, new Blob(arr), { type: 'image/*' }).then(res=>{
     console.log('then的返回---', res)
     if (res.res.status === 200) {
       url = res.rse.requestUrls[0]
     }
   })

(二)、上传到指定文件夹内(多文件)

client.multipartUpload('oss-mobile/' + fileListPermit[0].originFileObj.name, fileListPermit[0].originFileObj, {
  progress: async function (p) {
    console.log('Progress: ' + p)
  }
}).then(res => {
  console.log('穿到指定的文件目录下---', res)
  if (res.res.status === 200) {
    url = res.rse.requestUrls[0].split('?')[0]
  }
})
二、进行临时授权

实现逻辑
(一)向服务端获取oss存储相关内容
若stsToken安全令牌有过期时间,需要在上传前鉴别令牌是否在有效期内
a、AccessKeyId、
b、AccessKeySecret
c、dir等
(二)STSClient创建STS(下文称:client)示例,进行临时授权

 	const client = STSClient({
        accessKeyId: AccessKeyId,
        accessKeySecret: AccessKeySecret,
        region: Region,
        stsToken: SecurityToken,
        bucket: 'oss仓库name'
    })

(三)使用创建的client对象将文件上传到oss

	client.put(fileName, new Blob(fileList), { type: fileType }).then(res => {
      if (res.res.status === 200) {
        res.res.fileName = fileName
        resolve(res.res)
        // url = res.rse.requestUrls[0]
      } else {
        reject(new Error('文件上传失败!'))
      }
    }).catch(error => {
      reject(error)
    })

在这里插入图片描述

三、文件下载
const url_ = client.signatureUrl(objectKey)
// url为返回的文件在oss的路径
四、文件删除
	client.delete(objectKey)
```
技术交流、提问
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200110173910989.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppdXdhbmxpNjY2,size_16,color_FFFFFF,t_70)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!