From 37ae1b5fa02696d4e0a37e61f223894e2bb84d66 Mon Sep 17 00:00:00 2001 From: 6174 Date: Sat, 20 Jan 2024 16:02:18 +0800 Subject: [PATCH] Download function bugfix --- .../comfy-extension-manager/install-extension.ts | 12 +++++++++--- .../src/modules/utils/__test__/download-url.test.ts | 3 ++- apps/node/src/modules/utils/download-url.ts | 9 ++++----- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/apps/node/src/modules/comfy-extension-manager/install-extension.ts b/apps/node/src/modules/comfy-extension-manager/install-extension.ts index 87414dd9..2ffbde55 100644 --- a/apps/node/src/modules/comfy-extension-manager/install-extension.ts +++ b/apps/node/src/modules/comfy-extension-manager/install-extension.ts @@ -10,6 +10,8 @@ import { getAppTmpDir } from "../utils/get-appdata-dir"; import { checkIfInstalled } from "../comfyui/bootstrap"; import * as fsExtra from "fs-extra" import logger from "../utils/logger"; +import { URL } from 'url'; + const appTmpDir = getAppTmpDir(); /** @@ -94,7 +96,6 @@ async function unzipInstall(dispatcher: TaskEventDispatcher, files: string[]): P return true; } - async function copyInstall(dispatcher: TaskEventDispatcher, files: string[], jsPathName: string | null = null): Promise { for (const url of files) { let cleanUrl: string = url; @@ -102,13 +103,18 @@ async function copyInstall(dispatcher: TaskEventDispatcher, files: string[], jsP cleanUrl = cleanUrl.slice(0, -1); } try { + let myurl = new URL(cleanUrl); + let pathname = myurl.pathname; + let filename = path.basename(pathname); + let ext = path.extname(pathname); + const fileNameWithExt = filename + ext; if (cleanUrl.endsWith('.py')) { dispatcher({ message: `Start copy ${cleanUrl} to install` }); - await downloadUrl(dispatcher, url, EXTENTION_FOLDER); + await downloadUrl(dispatcher, url, path.resolve(EXTENTION_FOLDER, fileNameWithExt)); } else { - const targetPath: string = path.join(WEB_EXTENTION_FOLDER, jsPathName || ''); + const targetPath: string = path.join(WEB_EXTENTION_FOLDER, jsPathName || '', fileNameWithExt); if (!fs.existsSync(targetPath)) { fs.mkdirSync(targetPath, { recursive: true }); } diff --git a/apps/node/src/modules/utils/__test__/download-url.test.ts b/apps/node/src/modules/utils/__test__/download-url.test.ts index 71f2b3c1..23ff0b68 100644 --- a/apps/node/src/modules/utils/__test__/download-url.test.ts +++ b/apps/node/src/modules/utils/__test__/download-url.test.ts @@ -1,3 +1,4 @@ +import path from "path"; import { downloadUrl } from "../download-url"; import { getAppDataDir } from "../get-appdata-dir"; @@ -7,7 +8,7 @@ async function testDownload() { try { const ret = await downloadUrl((event) => { console.log(event) - }, "https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh", dataURL); + }, "https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh", path.resolve(dataURL, "Miniconda3-latest-MacOSX-x86_64.sh")); } catch(err) { console.log(err); } diff --git a/apps/node/src/modules/utils/download-url.ts b/apps/node/src/modules/utils/download-url.ts index f296907d..7b3fddb7 100644 --- a/apps/node/src/modules/utils/download-url.ts +++ b/apps/node/src/modules/utils/download-url.ts @@ -8,15 +8,14 @@ import { TaskEventDispatcher } from '../task-queue/task-queue'; import logger from './logger'; import { HttpsProxyAgent } from 'https-proxy-agent'; import { systemProxy, systemProxyString } from './env'; -import { sys } from 'typescript'; - +import * as fsExtra from "fs-extra"; export async function downloadUrl(dispatch: TaskEventDispatcher, url: string, targetPath: string): Promise { const filename: string = path.basename(url); - const filePath: string = path.join(targetPath, filename); dispatch({ message: `Downloading ${url}` - }) + }); try { + await fsExtra.ensureDir(path.dirname(targetPath)); const headers: { [key: string]: string } = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', }; @@ -47,7 +46,7 @@ export async function downloadUrl(dispatch: TaskEventDispatcher, url: string, ta const finished = util.promisify(stream.finished); const bufferStream = new stream.PassThrough(); - const writeStream = fs.createWriteStream(filePath); + const writeStream = fs.createWriteStream(targetPath); bufferStream.on('error', (err: any) => { logger.error(`Error with buffer stream: ${err.message}`);