From 92e46c2c33d3f5cc87186fc59a0fccbe3f8ded83 Mon Sep 17 00:00:00 2001 From: Yizhi <946185759@qq.com> Date: Mon, 10 Mar 2025 15:34:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A8=A1=E5=9E=8B=E4=B8=8B?= =?UTF-8?q?=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/deploy/common/model.ts | 51 ++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/src/deploy/common/model.ts b/src/deploy/common/model.ts index 1fe418a..70dfe09 100644 --- a/src/deploy/common/model.ts +++ b/src/deploy/common/model.ts @@ -68,7 +68,7 @@ export abstract class Model { } //不存在则下载 let cache = cacheJsonData.find(c => c.url === url); - if (!cache) { + if (!cache || !fs.existsSync(path.join(cacheDir, cache.filename))) { let saveType = option?.saveType ?? null; const saveTypeDict: Record = { ".onnx": "onnx", @@ -83,33 +83,40 @@ export abstract class Model { return res.blob(); }).then(blob => blob.stream()).then(async stream => { const cacheFilename = path.join(cacheDir, Date.now().toString()); - let fsStream!: ReturnType; - let hashStream!: ReturnType; - let hash!: string; - await stream.pipeTo(new WritableStream({ - start(controller) { - fsStream = fs.createWriteStream(cacheFilename); - hashStream = crypto.createHash("md5"); - }, - async write(chunk, controller) { - await new Promise((resolve, reject) => fsStream.write(chunk, err => err ? reject(err) : resolve())); - await new Promise((resolve, reject) => hashStream.write(chunk, err => err ? reject(err) : resolve())); - }, - close() { - fsStream.end(); - hashStream.end(); - hash = hashStream.digest("hex") - }, - abort() { } - })); + const hash = await new Promise((resolve, reject) => { + let fsStream!: ReturnType; + let hashStream!: ReturnType; + stream.pipeTo(new WritableStream({ + start(controller) { + fsStream = fs.createWriteStream(cacheFilename); + hashStream = crypto.createHash("md5"); + }, + async write(chunk, controller) { + await new Promise((resolve, reject) => fsStream.write(chunk, err => err ? reject(err) : resolve())); + await new Promise((resolve, reject) => hashStream.write(chunk, err => err ? reject(err) : resolve())); + }, + close() { + fsStream.end(); + hashStream.end(); + resolve(hashStream.digest("hex")); + }, + abort() { } + })).catch(reject); + }) return { filename: cacheFilename, hash }; }); //重命名 const filename = `${res.hash}.${saveType}`; fs.promises.rename(res.filename, path.join(cacheDir, filename)); //保存缓存 - cache = { url, filename }; - cacheJsonData.push(cache); + if (!cache) { + cache = { url, filename }; + cacheJsonData.push(cache); + } + else { + cache.filename = filename; + cache.url = url; + } fs.promises.writeFile(cacheJsonFile, JSON.stringify(cacheJsonData, null, 4)); } //返回模型数据