From 0388ce6291184ca0319da9376b5858e58d7c4df9 Mon Sep 17 00:00:00 2001 From: "Xc@centOs" Date: Tue, 10 Oct 2023 20:19:12 +0800 Subject: [PATCH] =?UTF-8?q?qiniu=20cos=20getFileStat=E9=92=88=E5=AF=B9?= =?UTF-8?q?=E7=BA=BF=E4=B8=8A=E5=AE=9E=E6=B5=8B=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/extraFile/commit/index.ts | 12 ++++++------ src/context/BackendRuntimeContext.ts | 6 ++++-- src/utils/cos/qiniu.ts | 20 +++++++++++++++++--- src/watchers/extraFile.ts | 2 +- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/components/extraFile/commit/index.ts b/src/components/extraFile/commit/index.ts index 4cc0e4e3b..bc53a37c9 100644 --- a/src/components/extraFile/commit/index.ts +++ b/src/components/extraFile/commit/index.ts @@ -38,17 +38,16 @@ export default OakComponent({ getEfIds() { const { efPaths } = this.props; const { oakFullpath } = this.state; - assert(efPaths); + assert(efPaths && efPaths.length > 0); if (oakFullpath) { const ids = efPaths.map( (path) => { const path2 = path ? `${oakFullpath}.${path}` : oakFullpath; const data = this.features.runningTree.getFreshValue(path2); - if (data) { - return (data as EntityDict['extraFile']['OpSchema'][]).map( - ele => ele.id - ); - } + assert(data, `efPath为${path}的路径上取不到extraFile数据,请设置正确的相对路径`); + return (data as EntityDict['extraFile']['OpSchema'][]).map( + ele => ele.id + ); } ).flat().filter( ele => !!ele @@ -59,6 +58,7 @@ export default OakComponent({ }, async upload() { const ids = this.getEfIds(); + assert(ids.length > 0); const promises: Promise[] = []; ids.forEach( diff --git a/src/context/BackendRuntimeContext.ts b/src/context/BackendRuntimeContext.ts index 175239cec..de666e2b2 100644 --- a/src/context/BackendRuntimeContext.ts +++ b/src/context/BackendRuntimeContext.ts @@ -161,7 +161,7 @@ export abstract class BackendRuntimeContext[] = []; if (appId) { promises.push(this.setApplication(appId)); @@ -172,7 +172,9 @@ export abstract class BackendRuntimeContext 0) { await Promise.all(promises); } - closeRootMode(); + if (!rm) { + closeRootMode(); + } await this.commit(); } catch (err) { closeRootMode(); diff --git a/src/utils/cos/qiniu.ts b/src/utils/cos/qiniu.ts index 814b0b957..0ee8e4d81 100644 --- a/src/utils/cos/qiniu.ts +++ b/src/utils/cos/qiniu.ts @@ -9,6 +9,7 @@ import { QiniuCosConfig } from '../../types/Config'; import { QiniuCloudInstance } from 'oak-external-sdk'; import { urlSafeBase64Encode } from '../sign'; import { OakUploadException } from '../../types/Exception'; +import { OakExternalException } from 'oak-domain'; const QiniuSearchUrl = 'https://rs.qiniuapi.com/stat/EncodedEntryURI'; @@ -120,10 +121,23 @@ export default class Qiniu implements Cos { // web环境下访问不了七牛接口,用mockData过 const mockData = process.env.OAK_PLATFORM === 'web' ? { fsize: 100 } : undefined; - const result = await (instance as QiniuCloudInstance).getKodoFileStat(extraFile.bucket!, key, mockData); - const { fsize } = result; - return fsize > 0; + try { + const result = await (instance as QiniuCloudInstance).getKodoFileStat(extraFile.bucket!, key, mockData); + + const { fsize } = result; + return fsize > 0; + } + catch (err: any) { + // 七牛如果文件不存在会抛出status = 612的异常 + if (err instanceof OakExternalException) { + const data = err.data; + if (data && data.status === 612) { + return false; + } + } + throw err; + } } diff --git a/src/watchers/extraFile.ts b/src/watchers/extraFile.ts index 94bf9af3a..337d0fd8b 100644 --- a/src/watchers/extraFile.ts +++ b/src/watchers/extraFile.ts @@ -38,7 +38,7 @@ async function checkWhetherSuccess(context: BackendRuntimeContext, a } }, {}); } - else { + if (failedIds.length > 0) { await context.operate('extraFile', { id: await generateNewIdAsync(), action: 'update',