You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
shop-admin/src/api/file.js

62 lines
1.6 KiB

/*
* @Author: ch
* @Date: 2022-07-07 17:27:04
* @LastEditors: ch
* @LastEditTime: 2022-07-11 17:24:09
* @Description: file content
*/
import { ElMessage } from '@/plugins/element-plus';
import request from '@/utils/request';
// OSS签名
export function sign(serviceName, configId) {
return request({
url: '/oss/oss/generateOssSignature',
method: 'POST',
data: {
serviceName,
configId,
},
});
}
export function payCenterSign() {
return request({
url: '/payCenter/oss/ossSignature',
method: 'GET',
});
}
// 上传文件
export async function upload(serviceName, configId, file, cancelToken, suffix) {
const _suffix = file.name.substring(file.name.lastIndexOf('.'));
const suffixObj = typeof suffix === 'string' ? suffix.split(',') : suffix;
if (!suffixObj.includes(_suffix)) {
ElMessage.error('上传文件类型错误');
return '';
}
let oss = {};
if (serviceName) {
oss = await sign(serviceName, configId);
} else {
oss = await payCenterSign();
}
const data = new FormData();
const name = file.uid + _suffix;
data.append('name', name);
data.append('key', `${oss.dir}${name}`);
data.append('policy', oss.policy);
data.append('OSSAccessKeyId', oss.accessId);
data.append('Signature', oss.signature);
data.append('success_action_status', 200);
data.append('file', file);
return request({
url: oss.host,
method: 'POST',
data,
headers: {
oss: true,
},
timeout: 0,
cancelToken,
});
}