From 025f45df0a8e339bd7061733b45c9cf85f81978d Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 22 May 2026 14:55:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(upload):=20=E6=B7=BB=E5=8A=A0=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E8=BF=9B=E5=BA=A6=E6=98=BE=E7=A4=BA=E5=92=8C=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E5=A4=84=E7=90=86=EF=BC=8C=E8=AE=B0=E5=BD=95=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E8=80=97=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/build.js | 52 ++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/electron/build.js b/electron/build.js index 8f293ddc7..36cbb50c2 100644 --- a/electron/build.js +++ b/electron/build.js @@ -26,6 +26,7 @@ let buildChecked = false, updaterChecked = false; const shellQuote = (value) => `'${String(value).replace(/'/g, `'\\''`)}'`; +const elapsedSeconds = (startTime) => `${((Date.now() - startTime) / 1000).toFixed(1)}s`; /** * 检测并下载更新器 @@ -368,6 +369,7 @@ class WebsitePublisher { */ async uploadPackage(localFile, options = {}) { const filename = path.basename(localFile) + const startTime = Date.now() let spinner = ora(`Upload [0%] ${filename}`).start() const formData = new FormData() formData.append("version", this.version) @@ -378,33 +380,41 @@ class WebsitePublisher { } } formData.append("file", fs.createReadStream(localFile)) - const {status, data} = await axiosAutoTry({ - axios: { - method: 'post', - url: `${this.baseUrl}/api/upload/package`, - data: formData, - headers: { - 'Authorization': `Bearer ${this.token}`, - 'Content-Type': 'multipart/form-data;boundary=' + formData.getBoundary(), + let result + try { + result = await axiosAutoTry({ + axios: { + method: 'post', + url: `${this.baseUrl}/api/upload/package`, + data: formData, + headers: { + 'Authorization': `Bearer ${this.token}`, + 'Content-Type': 'multipart/form-data;boundary=' + formData.getBoundary(), + }, + onUploadProgress: progress => { + const complete = Math.min(99, Math.round(progress.loaded / progress.total * 100 | 0)) + '%' + spinner.text = `Upload [${complete}] ${filename}` + }, }, - onUploadProgress: progress => { - const complete = Math.min(99, Math.round(progress.loaded / progress.total * 100 | 0)) + '%' - spinner.text = `Upload [${complete}] ${filename}` + onRetry: (err) => { + const reason = err?.response?.status || err?.code || err?.message || '' + spinner.warn(`Upload [retry] ${filename} (${elapsedSeconds(startTime)})${reason ? ': ' + reason : ''}`) + spinner = ora(`Upload [0%] ${filename}`).start() }, - }, - onRetry: (err) => { - const reason = err?.response?.status || err?.code || err?.message || '' - spinner.warn(`Upload [retry] ${filename}${reason ? ': ' + reason : ''}`) - spinner = ora(`Upload [0%] ${filename}`).start() - }, - retryNumber: 3 - }) + retryNumber: 3 + }) + } catch (error) { + const reason = error?.response?.status || error?.code || error?.message || 'unknown error' + spinner.fail(`Upload [fail] ${filename} (${elapsedSeconds(startTime)}): ${reason}`) + throw error + } + const {status, data} = result if (status !== 200 || !utils.isJson(data) || !data.success) { const reason = data?.message || `status ${status}` - spinner.fail(`Upload [fail] ${filename}: ${reason}`) + spinner.fail(`Upload [fail] ${filename} (${elapsedSeconds(startTime)}): ${reason}`) throw new Error(`Upload failed: ${filename}: ${reason}`) } - spinner.succeed(`Upload [100%] ${filename}`) + spinner.succeed(`Upload [100%] ${filename} (${elapsedSeconds(startTime)})`) } /**