feat: cos-backend添加presignFile
This commit is contained in:
parent
ab9789eb4c
commit
3fa730cfb1
|
|
@ -1,2 +1,2 @@
|
|||
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
||||
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -111,4 +111,17 @@ export interface CosBackend<ED extends EntityDict> {
|
|||
lastModified: Date;
|
||||
}>;
|
||||
}>;
|
||||
/**
|
||||
* 对一个文件进行预签名,可以用于下载或上传
|
||||
* @param methods HTTP方法
|
||||
* @param application 应用
|
||||
* @param extraFile 文件
|
||||
* @param context 后台上下文
|
||||
* @returns 预签名的url及相关信息
|
||||
*/
|
||||
presignFile: (methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: ED['application']['Schema'], extraFile: ED['extraFile']['OpSchema'], context: BRC<ED>) => Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,4 +37,9 @@ export default class ALiYunBackend extends ALiYun implements CosBackend<EntityDi
|
|||
lastModified: Date;
|
||||
}>;
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -152,4 +152,13 @@ export default class ALiYunBackend extends ALiYun {
|
|||
assert(b, `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.listParts(extraFile.bucket, b.zone, key, extraFile.chunkInfo.uploadId);
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: aliyunCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
assert(b, `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone, key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class CTYunBackend extends CTYun implements CosBackend<EntityDict
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -100,4 +100,13 @@ export default class CTYunBackend extends CTYun {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: ctyunCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = ctyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
assert(b, `extraFile中的bucket名称在天翼云配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone, key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class LocalBackend extends Local implements CosBackend<EntityDict
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,5 +78,15 @@ export default class LocalBackend extends Local {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: localCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = localCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
assert(b, `extraFile中的bucket名称在本地存储配置中找不到「${extraFile.bucket}」`);
|
||||
assert(false, '本地存储暂不支持预签名操作');
|
||||
return {
|
||||
url: '',
|
||||
};
|
||||
}
|
||||
}
|
||||
;
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class QiniuBackend extends Qiniu implements CosBackend<EntityDict
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,5 +119,14 @@ export default class QiniuBackend extends Qiniu {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: qiniuCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = qiniuCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
assert(b, `extraFile中的bucket名称在七牛配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone, key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
;
|
||||
|
|
|
|||
|
|
@ -37,4 +37,9 @@ export default class S3Backend extends S3 implements CosBackend<EntityDict> {
|
|||
lastModified: Date;
|
||||
}>;
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -143,4 +143,13 @@ export default class S3Backend extends S3 {
|
|||
}))
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: s3CosConfig } = this.getConfigAndInstance(application, extraFile.bucket);
|
||||
const b = s3CosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
assert(b, `extraFile中的bucket名称在S3配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone || '', key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class TencentYunBackend extends TencentYun implements CosBackend<
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -98,4 +98,13 @@ export default class TencentYunBackend extends TencentYun {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: tencentYunCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = tencentYunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
assert(b, `extraFile中的bucket名称在腾讯云配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone, key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class UnknownBackend extends Unknown implements CosBackend<Entity
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,5 +38,8 @@ export default class UnknownBackend extends Unknown {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
throw new OakPreConditionUnsetException('未知存储暂不支持预签名操作');
|
||||
}
|
||||
}
|
||||
;
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class WechatBackend extends Wechat implements CosBackend<EntityDi
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,5 +59,8 @@ export default class WechatBackend extends Wechat {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
return { url: '' };
|
||||
}
|
||||
}
|
||||
;
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
||||
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthApplication", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthProvider", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUser", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "oauthUserAuthorization", import("../context/BackendRuntimeContext").BackendRuntimeContext<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "mobile", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
|
||||
export default _default;
|
||||
|
|
|
|||
|
|
@ -111,4 +111,17 @@ export interface CosBackend<ED extends EntityDict> {
|
|||
lastModified: Date;
|
||||
}>;
|
||||
}>;
|
||||
/**
|
||||
* 对一个文件进行预签名,可以用于下载或上传
|
||||
* @param methods HTTP方法
|
||||
* @param application 应用
|
||||
* @param extraFile 文件
|
||||
* @param context 后台上下文
|
||||
* @returns 预签名的url及相关信息
|
||||
*/
|
||||
presignFile: (methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: ED['application']['Schema'], extraFile: ED['extraFile']['OpSchema'], context: BRC<ED>) => Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,4 +37,9 @@ export default class ALiYunBackend extends ALiYun implements CosBackend<EntityDi
|
|||
lastModified: Date;
|
||||
}>;
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -155,5 +155,14 @@ class ALiYunBackend extends aliyun_1.default {
|
|||
(0, assert_1.assert)(b, `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.listParts(extraFile.bucket, b.zone, key, extraFile.chunkInfo.uploadId);
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: aliyunCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = aliyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
(0, assert_1.assert)(b, `extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone, key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.default = ALiYunBackend;
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class CTYunBackend extends CTYun implements CosBackend<EntityDict
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,5 +103,14 @@ class CTYunBackend extends ctyun_1.default {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: ctyunCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = ctyunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
(0, assert_1.assert)(b, `extraFile中的bucket名称在天翼云配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone, key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.default = CTYunBackend;
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class LocalBackend extends Local implements CosBackend<EntityDict
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,6 +81,16 @@ class LocalBackend extends local_1.default {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: localCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = localCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
(0, assert_1.assert)(b, `extraFile中的bucket名称在本地存储配置中找不到「${extraFile.bucket}」`);
|
||||
(0, assert_1.assert)(false, '本地存储暂不支持预签名操作');
|
||||
return {
|
||||
url: '',
|
||||
};
|
||||
}
|
||||
}
|
||||
exports.default = LocalBackend;
|
||||
;
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class QiniuBackend extends Qiniu implements CosBackend<EntityDict
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,6 +122,15 @@ class QiniuBackend extends qiniu_1.default {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: qiniuCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = qiniuCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
(0, assert_1.assert)(b, `extraFile中的bucket名称在七牛配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone, key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.default = QiniuBackend;
|
||||
;
|
||||
|
|
|
|||
|
|
@ -37,4 +37,9 @@ export default class S3Backend extends S3 implements CosBackend<EntityDict> {
|
|||
lastModified: Date;
|
||||
}>;
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -146,5 +146,14 @@ class S3Backend extends s3_1.default {
|
|||
}))
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: s3CosConfig } = this.getConfigAndInstance(application, extraFile.bucket);
|
||||
const b = s3CosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
(0, assert_1.assert)(b, `extraFile中的bucket名称在S3配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone || '', key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.default = S3Backend;
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class TencentYunBackend extends TencentYun implements CosBackend<
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,5 +101,14 @@ class TencentYunBackend extends tencent_1.default {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: tencentYunCosConfig } = this.getConfigAndInstance(application);
|
||||
const b = tencentYunCosConfig.buckets.find((ele) => ele.name === extraFile.bucket);
|
||||
(0, assert_1.assert)(b, `extraFile中的bucket名称在腾讯云配置中找不到「${extraFile.bucket}」`);
|
||||
return await instance.presignObjectUrl(methods, extraFile.bucket, b.zone, key, {
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
});
|
||||
}
|
||||
}
|
||||
exports.default = TencentYunBackend;
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class UnknownBackend extends Unknown implements CosBackend<Entity
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,6 +41,9 @@ class UnknownBackend extends unknown_1.default {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
throw new types_1.OakPreConditionUnsetException('未知存储暂不支持预签名操作');
|
||||
}
|
||||
}
|
||||
exports.default = UnknownBackend;
|
||||
;
|
||||
|
|
|
|||
|
|
@ -29,4 +29,9 @@ export default class WechatBackend extends Wechat implements CosBackend<EntityDi
|
|||
listMultipartUploads(application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
parts: never[];
|
||||
}>;
|
||||
presignFile(methods: 'GET' | 'PUT' | 'POST' | 'DELETE', application: EntityDict['application']['Schema'], extraFile: OpSchema, context: BRC<EntityDict>): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}>;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,6 +62,9 @@ class WechatBackend extends wechat_1.default {
|
|||
parts: [],
|
||||
};
|
||||
}
|
||||
async presignFile(methods, application, extraFile, context) {
|
||||
return { url: '' };
|
||||
}
|
||||
}
|
||||
exports.default = WechatBackend;
|
||||
;
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ export async function mergeChunkedUpload<ED extends EntityDict>(
|
|||
id: extraFileId,
|
||||
},
|
||||
},
|
||||
{ }
|
||||
{}
|
||||
);
|
||||
closeRootMode();
|
||||
} catch (err) {
|
||||
|
|
|
|||
|
|
@ -166,4 +166,23 @@ export interface CosBackend<ED extends EntityDict> {
|
|||
lastModified: Date,
|
||||
}>
|
||||
}>;
|
||||
|
||||
/**
|
||||
* 对一个文件进行预签名,可以用于下载或上传
|
||||
* @param methods HTTP方法
|
||||
* @param application 应用
|
||||
* @param extraFile 文件
|
||||
* @param context 后台上下文
|
||||
* @returns 预签名的url及相关信息
|
||||
*/
|
||||
presignFile: (
|
||||
methods: 'GET' | 'PUT' | 'POST' | 'DELETE',
|
||||
application: ED['application']['Schema'],
|
||||
extraFile: ED['extraFile']['OpSchema'],
|
||||
context: BRC<ED>,
|
||||
) => Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>; // 如果是PUT/DELETE/GET请求,可能需要添加请求头
|
||||
formdata?: Record<string, any>; // 对于POST上传,可能需要添加表单数据
|
||||
}>;
|
||||
}
|
||||
|
|
@ -291,4 +291,35 @@ export default class ALiYunBackend
|
|||
extraFile.chunkInfo!.uploadId!
|
||||
);
|
||||
}
|
||||
|
||||
async presignFile(
|
||||
methods: 'GET' | 'PUT' | 'POST' | 'DELETE',
|
||||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}> {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: aliyunCosConfig } =
|
||||
this.getConfigAndInstance(application);
|
||||
const b = (aliyunCosConfig as ALiYunCosConfig).buckets.find(
|
||||
(ele) => ele.name === extraFile.bucket
|
||||
);
|
||||
assert(
|
||||
b,
|
||||
`extraFile中的bucket名称在阿里云配置中找不到「${extraFile.bucket}」`
|
||||
);
|
||||
return await instance.presignObjectUrl(
|
||||
methods,
|
||||
extraFile.bucket!,
|
||||
b.zone,
|
||||
key,
|
||||
{
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -183,9 +183,40 @@ export default class CTYunBackend
|
|||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
){
|
||||
) {
|
||||
return {
|
||||
parts: [],
|
||||
}
|
||||
}
|
||||
|
||||
async presignFile(
|
||||
methods: 'GET' | 'PUT' | 'POST' | 'DELETE',
|
||||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}> {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: ctyunCosConfig } =
|
||||
this.getConfigAndInstance(application);
|
||||
const b = (ctyunCosConfig as CTYunCosConfig).buckets.find(
|
||||
(ele) => ele.name === extraFile.bucket
|
||||
);
|
||||
assert(
|
||||
b,
|
||||
`extraFile中的bucket名称在天翼云配置中找不到「${extraFile.bucket}」`
|
||||
);
|
||||
return await instance.presignObjectUrl(
|
||||
methods,
|
||||
extraFile.bucket!,
|
||||
b.zone,
|
||||
key,
|
||||
{
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -138,9 +138,35 @@ export default class LocalBackend extends Local implements CosBackend<EntityDict
|
|||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
){
|
||||
) {
|
||||
return {
|
||||
parts: [],
|
||||
}
|
||||
}
|
||||
|
||||
async presignFile(
|
||||
methods: 'GET' | 'PUT' | 'POST' | 'DELETE',
|
||||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}> {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: localCosConfig } =
|
||||
this.getConfigAndInstance(application);
|
||||
const b = (localCosConfig as LocalCosConfig).buckets.find(
|
||||
(ele) => ele.name === extraFile.bucket
|
||||
);
|
||||
assert(
|
||||
b,
|
||||
`extraFile中的bucket名称在本地存储配置中找不到「${extraFile.bucket}」`
|
||||
);
|
||||
assert(false, '本地存储暂不支持预签名操作');
|
||||
return {
|
||||
url: '',
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -194,9 +194,40 @@ export default class QiniuBackend extends Qiniu implements CosBackend<EntityDict
|
|||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
){
|
||||
) {
|
||||
return {
|
||||
parts: [],
|
||||
}
|
||||
}
|
||||
|
||||
async presignFile(
|
||||
methods: 'GET' | 'PUT' | 'POST' | 'DELETE',
|
||||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}> {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: qiniuCosConfig } =
|
||||
this.getConfigAndInstance(application);
|
||||
const b = (qiniuCosConfig as QiniuCosConfig).buckets.find(
|
||||
(ele) => ele.name === extraFile.bucket
|
||||
);
|
||||
assert(
|
||||
b,
|
||||
`extraFile中的bucket名称在七牛配置中找不到「${extraFile.bucket}」`
|
||||
);
|
||||
return await instance.presignObjectUrl(
|
||||
methods,
|
||||
extraFile.bucket!,
|
||||
b.zone,
|
||||
key,
|
||||
{
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
}
|
||||
);
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -285,4 +285,35 @@ export default class S3Backend extends S3 implements CosBackend<EntityDict> {
|
|||
}))
|
||||
}
|
||||
}
|
||||
|
||||
async presignFile(
|
||||
methods: 'GET' | 'PUT' | 'POST' | 'DELETE',
|
||||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}> {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: s3CosConfig } =
|
||||
this.getConfigAndInstance(application, extraFile.bucket!);
|
||||
const b = (s3CosConfig as S3CosConfig).buckets.find(
|
||||
(ele) => ele.name === extraFile.bucket
|
||||
);
|
||||
assert(
|
||||
b,
|
||||
`extraFile中的bucket名称在S3配置中找不到「${extraFile.bucket}」`
|
||||
);
|
||||
return await instance.presignObjectUrl(
|
||||
methods,
|
||||
extraFile.bucket!,
|
||||
b.zone || '',
|
||||
key,
|
||||
{
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -180,9 +180,40 @@ export default class TencentYunBackend extends TencentYun implements CosBackend<
|
|||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
){
|
||||
) {
|
||||
return {
|
||||
parts: [],
|
||||
}
|
||||
}
|
||||
|
||||
async presignFile(
|
||||
methods: 'GET' | 'PUT' | 'POST' | 'DELETE',
|
||||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}> {
|
||||
const key = this.formKey(extraFile);
|
||||
const { instance, config: tencentYunCosConfig } =
|
||||
this.getConfigAndInstance(application);
|
||||
const b = (tencentYunCosConfig as TencentYunCosConfig).buckets.find(
|
||||
(ele) => ele.name === extraFile.bucket
|
||||
);
|
||||
assert(
|
||||
b,
|
||||
`extraFile中的bucket名称在腾讯云配置中找不到「${extraFile.bucket}」`
|
||||
);
|
||||
return await instance.presignObjectUrl(
|
||||
methods,
|
||||
extraFile.bucket!,
|
||||
b.zone,
|
||||
key,
|
||||
{
|
||||
expires: 24 * 60 * 60, // 1 day
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -87,9 +87,22 @@ export default class UnknownBackend extends Unknown implements CosBackend<Entity
|
|||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
){
|
||||
) {
|
||||
return {
|
||||
parts: [],
|
||||
}
|
||||
}
|
||||
|
||||
async presignFile(
|
||||
methods: 'GET' | 'PUT' | 'POST' | 'DELETE',
|
||||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}> {
|
||||
throw new OakPreConditionUnsetException('未知存储暂不支持预签名操作');
|
||||
}
|
||||
};
|
||||
|
|
|
|||
|
|
@ -117,9 +117,22 @@ export default class WechatBackend extends Wechat implements CosBackend<EntityDi
|
|||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
){
|
||||
) {
|
||||
return {
|
||||
parts: [],
|
||||
}
|
||||
}
|
||||
|
||||
async presignFile(
|
||||
methods: 'GET' | 'PUT' | 'POST' | 'DELETE',
|
||||
application: EntityDict['application']['Schema'],
|
||||
extraFile: OpSchema,
|
||||
context: BRC<EntityDict>,
|
||||
): Promise<{
|
||||
url: string;
|
||||
headers?: Record<string, string | string[]>;
|
||||
formdata?: Record<string, any>;
|
||||
}> {
|
||||
return { url: '' }
|
||||
}
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue