feat: add chunked desktop client release uploads
This commit is contained in:
@@ -202,7 +202,7 @@
|
||||
>
|
||||
<a-button :loading="uploading">
|
||||
<template #icon><UploadOutlined /></template>
|
||||
{{ form.oss_object_key ? '重新上传' : '选择文件并上传' }}
|
||||
{{ uploadButtonText('installer') }}
|
||||
</a-button>
|
||||
</a-upload>
|
||||
<div v-if="form.file_name" class="upload-result">
|
||||
@@ -268,7 +268,7 @@
|
||||
>
|
||||
<a-button :loading="updaterUploading">
|
||||
<template #icon><UploadOutlined /></template>
|
||||
{{ form.updater_oss_object_key ? '重新上传' : '选择文件并上传' }}
|
||||
{{ uploadButtonText('updater') }}
|
||||
</a-button>
|
||||
</a-upload>
|
||||
<div v-if="form.updater_file_name" class="upload-result">
|
||||
@@ -400,6 +400,8 @@ const total = ref(0)
|
||||
const statusLoadingId = ref<number | null>(null)
|
||||
const uploading = ref(false)
|
||||
const updaterUploading = ref(false)
|
||||
const uploadProgress = ref<number | null>(null)
|
||||
const updaterUploadProgress = ref<number | null>(null)
|
||||
|
||||
const enabledRows = computed(() => rows.value.filter((row) => row.enabled).length)
|
||||
const forceRows = computed(() => rows.value.filter((row) => row.force_update).length)
|
||||
@@ -568,8 +570,10 @@ async function beforeUploadReleasePackage(file: File, kind: 'installer' | 'updat
|
||||
}
|
||||
if (kind === 'installer') {
|
||||
uploading.value = true
|
||||
uploadProgress.value = 0
|
||||
} else {
|
||||
updaterUploading.value = true
|
||||
updaterUploadProgress.value = 0
|
||||
}
|
||||
try {
|
||||
const result = await desktopClientReleaseApi.uploadOSS(file, {
|
||||
@@ -578,6 +582,14 @@ async function beforeUploadReleasePackage(file: File, kind: 'installer' | 'updat
|
||||
channel: form.channel.trim() || 'stable',
|
||||
version: form.version.trim(),
|
||||
kind,
|
||||
onProgress(progress) {
|
||||
if (typeof progress.percent !== 'number') return
|
||||
if (kind === 'installer') {
|
||||
uploadProgress.value = progress.percent
|
||||
} else {
|
||||
updaterUploadProgress.value = progress.percent
|
||||
}
|
||||
},
|
||||
})
|
||||
if (kind === 'installer') {
|
||||
form.oss_object_key = result.oss_object_key
|
||||
@@ -599,10 +611,25 @@ async function beforeUploadReleasePackage(file: File, kind: 'installer' | 'updat
|
||||
} finally {
|
||||
uploading.value = false
|
||||
updaterUploading.value = false
|
||||
uploadProgress.value = null
|
||||
updaterUploadProgress.value = null
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
function uploadButtonText(kind: 'installer' | 'updater') {
|
||||
const isUploading = kind === 'installer' ? uploading.value : updaterUploading.value
|
||||
const progress = kind === 'installer' ? uploadProgress.value : updaterUploadProgress.value
|
||||
const hasUploaded = kind === 'installer' ? Boolean(form.oss_object_key) : Boolean(form.updater_oss_object_key)
|
||||
if (isUploading && typeof progress === 'number' && progress < 100) {
|
||||
return `上传中 ${progress}%`
|
||||
}
|
||||
if (isUploading) {
|
||||
return '写入 OSS...'
|
||||
}
|
||||
return hasUploaded ? '重新上传' : '选择文件并上传'
|
||||
}
|
||||
|
||||
function beforeUploadInstallerPackage(file: File) {
|
||||
return beforeUploadReleasePackage(file, 'installer')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user