test: 阿里云oss

This commit is contained in:
jmal 2023-03-26 23:27:00 +08:00
parent cb6a2ff6e4
commit 8be43f922d
2 changed files with 38 additions and 35 deletions

12
src/api/aliyunoss.js Normal file
View File

@ -0,0 +1,12 @@
import request from '@/utils/request'
export default {
// 获取分享者信息
getAppToken: function(params) {
return request({
url: 'oss/aliyun/getAppToken',
method: 'get',
params
})
},
}

View File

@ -5,6 +5,8 @@
<script> <script>
import OSS from "ali-oss" import OSS from "ali-oss"
import aliyunOSSApi from "@/api/aliyunoss";
export default { export default {
name: "testoss", name: "testoss",
data() { data() {
@ -19,51 +21,40 @@ export default {
} }
}, },
mounted() { mounted() {
this.getAccessToken()
let that = this let that = this
document.getElementById('file').addEventListener('change', function (e) { document.getElementById('file').addEventListener('change', function (e) {
let file = e.target.files[0]; let file = e.target.files[0];
let storeAs = file.name; let storeAs = file.name;
console.log(file.name + ' => ' + storeAs); console.log(file.name + ' => ' + storeAs);
// OSS.urllib是SDK内部封装的发送请求的逻辑,开发者可以使用任何发送请求的库向sts-server发送请求。 let client = new OSS({
OSS.urllib.request(that.stsServerUrl, {method: 'GET'}, (err, response) => { accessKeyId: that.accessToken.AccessKeyId,
if (err) { accessKeySecret: that.accessToken.AccessKeySecret,
return alert(err); stsToken: that.accessToken.SecurityToken,
} endpoint: 'oss-cn-guangzhou.aliyuncs.com',
try { bucket: 'jmalcloud',
this.accessToken = JSON.parse(response); internal: true,
} catch (e) { cname: false,
return alert('parse sts response info error: ' + e.message); secure: true,
} refreshSTSToken: async () => this.refreshToken()
let client = new OSS({ });
accessKeyId: this.accessToken.AccessKeyId, // storeAs可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
accessKeySecret: this.accessToken.AccessKeySecret, // file可以自定义为File对象、Blob数据以及OSS Buffer。
stsToken: this.accessToken.SecurityToken, client.multipartUpload(storeAs, file).then(function (result) {
endpoint: 'oss-cn-guangzhou.aliyuncs.com', console.log(result);
bucket: 'jmalcloud', }).catch(function (err) {
internal: true, console.log(err);
cname: false,
secure: true,
refreshSTSToken: async () => this.refreshToken()
});
// storeAs可以自定义为文件名(例如file.txt)或目录(例如abc/test/file.txt)的形式,实现将文件上传至当前Bucket或Bucket下的指定目录。
// file可以自定义为File对象、Blob数据以及OSS Buffer。
client.multipartUpload(storeAs, file).then(function (result) {
console.log(result);
}).catch(function (err) {
console.log(err);
});
}); });
}); });
}, },
methods: { methods: {
getAccessToken() {
aliyunOSSApi.getAppToken().then((res) => {
this.accessToken = res.data
})
},
async refreshToken() { async refreshToken() {
// 向您搭建的STS服务获取临时访问凭证。 this.getAccessToken()
const info = await fetch(this.stsServerUrl);
return {
accessKeyId: info.AccessKeyId,
accessKeySecret: info.AccessKeySecret,
stsToken: info.SecurityToken
}
} }
} }
} }