97 lines
3.1 KiB
TypeScript
97 lines
3.1 KiB
TypeScript
import { EntityDict } from '../../oak-app-domain';
|
|
import { assert } from 'oak-domain/lib/utils/assert';
|
|
import { CosBackend } from "../../types/Cos";
|
|
import { OpSchema } from '../../oak-app-domain/ExtraFile/Schema';
|
|
import { LocalInstance, LocalSDK } from 'oak-external-sdk';
|
|
import { LocalCosConfig, Protocol } from '../../types/Config';
|
|
|
|
import Local from './local';
|
|
import { BRC } from '../..';
|
|
|
|
export default class LocalBackend extends Local implements CosBackend<EntityDict> {
|
|
private getConfigAndInstance(
|
|
application: EntityDict['application']['Schema']
|
|
) {
|
|
const { config, account } = this.getConfig(application);
|
|
const instance = LocalSDK.getInstance(
|
|
account.accessKey,
|
|
account.secretKey
|
|
);
|
|
return {
|
|
config,
|
|
instance,
|
|
};
|
|
}
|
|
|
|
async composeFileUrlBackend(
|
|
options: {
|
|
application: EntityDict['application']['Schema'],
|
|
extraFile: OpSchema,
|
|
context: BRC<EntityDict>,
|
|
style?: string
|
|
}
|
|
) {
|
|
const { application, extraFile, context, style } = options;
|
|
const { config: localConfig } = this.getConfig(application);
|
|
|
|
let bucket = (localConfig.buckets as LocalCosConfig['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 as Protocol[]).includes('https:')
|
|
? protocol.findIndex((ele) => ele === 'https:')
|
|
: 0;
|
|
protocol2 = protocol[index];
|
|
}
|
|
return `${protocol2}//${domain}${nginxPath ? '/' + nginxPath : ''}/${this.formKey(extraFile)}${style ? style : ''}`;
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
async formUploadMeta(
|
|
application: EntityDict['application']['Schema'],
|
|
extraFile: OpSchema
|
|
) {
|
|
const { bucket } = extraFile;
|
|
// 构造文件上传所需的key
|
|
const key = this.formKey(extraFile);
|
|
const { instance, config: localCosConfig } =
|
|
this.getConfigAndInstance(application);
|
|
|
|
const { buckets } = localCosConfig as LocalCosConfig;
|
|
let bucket2 = bucket;
|
|
if (!bucket2) {
|
|
const { defaultBucket } = localCosConfig as LocalCosConfig;
|
|
bucket2 = defaultBucket!;
|
|
}
|
|
assert(bucket2);
|
|
const b = buckets.find((ele) => ele.name === bucket2);
|
|
assert(b, `${bucket2}不是一个有效的桶配置`);
|
|
Object.assign(extraFile, {
|
|
bucket: bucket2,
|
|
uploadMeta: (instance as LocalInstance).getUploadInfo(
|
|
bucket2,
|
|
key,
|
|
),
|
|
});
|
|
|
|
}
|
|
|
|
async checkWhetherSuccess(
|
|
application: EntityDict['application']['Schema'],
|
|
extraFile: OpSchema
|
|
) {
|
|
return true;
|
|
}
|
|
|
|
async removeFile(
|
|
application: EntityDict['application']['Schema'],
|
|
extraFile: OpSchema
|
|
) {
|
|
|
|
}
|
|
};
|