最近项目中有文件上传的功能,才发现阿里云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)
来源:CSDN
作者:jiuwanli666
链接:https://blog.csdn.net/jiuwanli666/article/details/103327392