上传文件到阿里云文件存储服务器
阿里云上传提供回调方法,可以回调上传后的文件信息, 但是我们后端没有签名的时候不让回调获取信息,故本文使用无回调方式获取上传后的文件路径
import { getAliyunOssSTSAK ,getDirectOssSTSAK} from '@/api/common/ossupload';
import OSS from "ali-oss";
let util = {};
//上传方法
util.ossUpload = async function (prefix, file,index) {
let ossClient = await util.ossClient();
try {
if (!prefix) {
prefix = "";
}
// 文件名称
let fileName = file.name;
if ( index < 10) {
index = "0" + index;
}
// 文件后缀
let suffix = fileName.split('.').pop().toLowerCase();
// 按照时间戳生产key
let newFileName = prefix + util.guid() +index+ "." + suffix;
let res = await ossClient.put(newFileName, file);
return res;
} catch (e) {
console.log(e);
}
}
// 初始化阿里云上传控件
util.ossClient = async function () {
//取出存储的签名信息
let ossSTSAK = window.ossSTSAK;
let expiration = ossSTSAK && ossSTSAK.expiration ? ossSTSAK.expiration : "1979-01-01 00:00:00";
expiration = expiration.replace("-", "/");
expiration = new Date(Date.parse(expiration));
let currentTime = new Date();
// 如果本地缓存缓存且缓存时间有效,则直接取本地缓存初始化上传控件
if (currentTime < expiration) {
return new OSS({
region: 'oss-cn-shanghai',
accessKeyId: ossSTSAK.accessKeyId,
accessKeySecret: ossSTSAK.accessKeySecret,
stsToken: ossSTSAK.securityToken,
bucket: ossSTSAK.bucket
});
}
// 从后端获取凭证
let res = await getAliyunOssSTSAK();
if (res.code != 200) {
// 将上传品质保存到本地缓存
console.log(res);
return;
}
window.ossSTSAK = res.data
return new OSS({
region: 'oss-cn-shanghai',
accessKeyId: res.data.accessKeyId,
accessKeySecret: res.data.accessKeySecret,
stsToken: res.data.securityToken,
bucket: res.data.bucket
});
}
// 格式化当前时间为YYYYMMDDHHSS格式
util.guid= function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}