最近项目中有文件上传的功能,才发现阿里云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 = fileNameresolve(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-/0110173910989.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppdXdhbmxpNjY2,size_16,color_FFFFFF,t_70)