67 lines
2.4 KiB
JavaScript
67 lines
2.4 KiB
JavaScript
import { assert } from 'oak-domain/lib/utils/assert';
|
|
import { OakUploadException } from '../../types/Exception';
|
|
import { OakNetworkException } from 'oak-domain/lib/types/Exception';
|
|
export default class Local {
|
|
name = 'local';
|
|
autoInform() {
|
|
return false;
|
|
}
|
|
getConfig(application) {
|
|
const { system } = application;
|
|
const { config } = system;
|
|
const localConfig = config.Cos?.local;
|
|
assert(localConfig);
|
|
const { accessKey } = localConfig;
|
|
const account = config.Account?.local?.find((ele) => ele.accessKey === accessKey);
|
|
assert(account);
|
|
return {
|
|
config: localConfig,
|
|
account
|
|
};
|
|
}
|
|
formKey(extraFile) {
|
|
const { id, extension, objectId } = extraFile;
|
|
assert(objectId);
|
|
return `extraFile/${objectId}${extension ? '.' + extension : ''}`;
|
|
}
|
|
async upload(extraFile, uploadFn, file, uploadToAspect, getPercent) {
|
|
let result;
|
|
const { applicationId, type, extra2, id } = extraFile;
|
|
try {
|
|
result = (await uploadToAspect(file, 'file', 'uploadExtraFile', {
|
|
applicationId,
|
|
extraFileId: id,
|
|
}, true));
|
|
}
|
|
catch (err) {
|
|
// 网络错误
|
|
throw new OakNetworkException('网络异常,请求失败');
|
|
}
|
|
const isSuccess = result.success === true;
|
|
if (isSuccess) {
|
|
return;
|
|
}
|
|
else {
|
|
throw new OakUploadException('文件上传服务器失败');
|
|
}
|
|
}
|
|
composeFileUrl(application, extraFile, style //多媒体样式
|
|
) {
|
|
const { config: localConfig } = this.getConfig(application);
|
|
let bucket = localConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
|
if (bucket) {
|
|
const { domain, protocol, nginxPath } = bucket;
|
|
let protocol2 = protocol;
|
|
if (protocol instanceof Array) {
|
|
// protocol存在https: 说明域名有证书
|
|
const index = protocol.includes('https:')
|
|
? protocol.findIndex((ele) => ele === 'https:')
|
|
: 0;
|
|
protocol2 = protocol[index];
|
|
}
|
|
return `${protocol2}//${domain}${nginxPath ? '/' + nginxPath : ''}/${this.formKey(extraFile)}${style ? style : ''}`;
|
|
}
|
|
return '';
|
|
}
|
|
}
|