fix: fallback when desktop release direct upload is missing
This commit is contained in:
@@ -85,6 +85,8 @@ const DESKTOP_CLIENT_RELEASE_COMPLETE_TIMEOUT_MS = 10 * 60 * 1000
|
||||
const DESKTOP_CLIENT_RELEASE_CHUNK_SIZE_BYTES = 16 * 1024 * 1024
|
||||
const DESKTOP_CLIENT_RELEASE_HASH_CHUNK_SIZE_BYTES = 8 * 1024 * 1024
|
||||
const DESKTOP_CLIENT_RELEASE_CHUNK_RETRIES = 2
|
||||
const DIRECT_UPLOAD_NOT_FOUND_ERROR_CODE = 40078
|
||||
const DIRECT_UPLOAD_NOT_FOUND_ERROR_MESSAGE = 'direct_upload_not_found'
|
||||
|
||||
export interface DesktopClientReleaseUploadProgress {
|
||||
loaded: number
|
||||
@@ -199,6 +201,7 @@ export const desktopClientReleaseApi = {
|
||||
total: file.size,
|
||||
percent: 0,
|
||||
stage: 'uploading',
|
||||
message: '直传未完成,已切换为后端分片上传',
|
||||
})
|
||||
return uploadOSSInChunks(file, target)
|
||||
}
|
||||
@@ -330,7 +333,11 @@ async function completeDirectUpload(
|
||||
}
|
||||
|
||||
function isDirectUploadNotFoundError(error: unknown): boolean {
|
||||
return error instanceof OpsApiError && error.code === 40078
|
||||
return (
|
||||
error instanceof OpsApiError &&
|
||||
(error.code === DIRECT_UPLOAD_NOT_FOUND_ERROR_CODE ||
|
||||
error.message === DIRECT_UPLOAD_NOT_FOUND_ERROR_MESSAGE)
|
||||
)
|
||||
}
|
||||
|
||||
function directUploadHeaders(headers: Record<string, string> | undefined): Record<string, string> {
|
||||
@@ -342,6 +349,7 @@ function directUploadHeaders(headers: Record<string, string> | undefined): Recor
|
||||
|
||||
function shouldFallbackToChunkedUpload(error: unknown): boolean {
|
||||
if (axios.isAxiosError(error)) return true
|
||||
if (isDirectUploadNotFoundError(error)) return true
|
||||
return error instanceof Error && error.message === 'missing_direct_upload_url'
|
||||
}
|
||||
|
||||
@@ -377,6 +385,10 @@ async function pollCompleteJob(
|
||||
if (job.status === 'failed') {
|
||||
throw new OpsApiError({
|
||||
message: job.error_code || 'desktop_client_release_upload_failed',
|
||||
code:
|
||||
job.error_code === DIRECT_UPLOAD_NOT_FOUND_ERROR_MESSAGE
|
||||
? DIRECT_UPLOAD_NOT_FOUND_ERROR_CODE
|
||||
: undefined,
|
||||
detail: job.error || job.message || '上传确认失败',
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user