前端使用阿里云上传文件(sts授权上传) vue框架
下载阿里云插件
npm install ali-oss --save
获取授权所需的参数
async getAliToken() {
let uploadUrl = "api/v1/funs/getSts";
return new Promise((resolve, reject) => {
uploadInstance
.post(uploadUrl)
.then((res) => {
if (res.status === 200) {
const {
expiration,
AccessKeyId,
AccessKeySecret,
SecurityToken,
bucket,
endpoint,
} = res.data;
let dataObj = {
region: endpoint,
bucket,
accessKeyId: AccessKeyId,
accessKeySecret: AccessKeySecret,
stsToken: SecurityToken,
};
resolve(dataObj);
} else {
reject(false);
}
})
.catch((err) => {
console.log(err);
reject(false);
});
});
}
});
封装一个oss对象接受获取到的参数
Client = (data) => {
return new OSS({
region: data.region,
accessKeyId: data.accessKeyId,
secure: true,
accessKeySecret: data.accessKeySecret,
stsToken: data.stsToken,
bucket: data.bucket,
});
};
上传文件到阿里云
async updateAliOSS(filename, file) {
let params = {};
await this.getAliToken()
.then((response) => {
params = response;
})
.catch((err) => {
console.log(err);
});
return new Promise((resolve, reject) => {
let client = this.Client(params);
client.multipartUpload(filename, file, {
progress: function(p, checkpoint) {
option.onProgress({ percent: Math.floor(p * 100) });
},
})
.then(({ res }) => {
if (res.statusCode === 200) {
resolve(res.requestUrls);
} else {
option.onError("上传失败");
}
})
.catch((error) => {
client.put(filename, file, {
progress: function(p, checkpoint) {
option.onProgress({ percent: Math.floor(p * 100) });
},
})
.then(({ res }) => {
if (res.statusCode == 200) {
resolve(res.requestUrls);
} else {
option.onError("上传失败");
}
});
});
});
}