fix(clouddrop): retry share-link during post-processing, never fail upload
Upload completes on server but file is still being processed, so share-link fails. Retry up to 6x with backoff; on final failure, use fileId-based fallback URL instead of throwing — prevents upload-manager from retrying the entire multi-GB upload.
This commit is contained in:
parent
bc32f4dc95
commit
cba69a7806
@ -78,10 +78,22 @@ class ClouddropUploader {
|
|||||||
fileId = await this._uploadChunked(filePath, fileName, fileSize, progressCb, signal, throttle);
|
fileId = await this._uploadChunked(filePath, fileName, fileSize, progressCb, signal, throttle);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a share link for the uploaded file
|
// Create a share link — retry a few times while server post-processes the file.
|
||||||
const shareUrl = await this._createShareLink(fileId, signal);
|
// If share-link ultimately fails, DO NOT throw: upload itself succeeded and we
|
||||||
|
// don't want upload-manager to retry the entire (possibly multi-GB) upload.
|
||||||
|
let shareUrl = null;
|
||||||
|
const shareAttempts = 6;
|
||||||
|
for (let i = 0; i < shareAttempts; i++) {
|
||||||
|
if (signal && signal.aborted) throw new Error('Aborted');
|
||||||
|
try {
|
||||||
|
shareUrl = await this._createShareLink(fileId, signal);
|
||||||
|
if (shareUrl) break;
|
||||||
|
} catch (err) {
|
||||||
|
if (i === shareAttempts - 1) break;
|
||||||
|
await new Promise(r => setTimeout(r, 3000 + i * 2000));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Extract slug from share URL (format: https://clouddrop.cc/share/SLUG)
|
|
||||||
const slugMatch = String(shareUrl || '').match(/\/share\/([a-zA-Z0-9]+)/);
|
const slugMatch = String(shareUrl || '').match(/\/share\/([a-zA-Z0-9]+)/);
|
||||||
const fileCode = slugMatch ? slugMatch[1] : fileId;
|
const fileCode = slugMatch ? slugMatch[1] : fileId;
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user