oak-general-business/src/utils/cos/local.backend.ts

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
) {
}
};