yikart/AiToEarn · error · Error
上传封面失败,失败原因:获取上传id失败
Error message
上传封面失败,失败原因:获取上传id失败
What it means
Mirror of error 364 but for the cover/thumbnail image: uploadCoverFile requests an initial UploadID from the COS endpoint and throws if none is returned. The cover upload never started because the upload session could not be created.
Solutions
- Verify the cover image exists locally and is a valid image with expected size.
- Re-obtain upload params (fresh traceKey) before retrying the cover upload.
- Log the full uploadIdRes response to read the COS error code.
- Retry after backoff if the server was throttling.
Example fix
null
Defensive patterns
Strategy: validation
Validate before calling
import fs from 'fs';
if (!fs.existsSync(coverPath)) throw new Error('cover file missing');
if (fs.statSync(coverPath).size === 0) throw new Error('cover file empty'); Type guard
function hasUploadId(res: unknown): res is { UploadID: string } {
return typeof (res as any)?.UploadID === 'string' && (res as any).UploadID.length > 0;
} Try / catch
try {
await service.uploadCoverFile(/*...*/);
} catch (e) {
if (e.message.includes('获取上传id失败')) {
// refetch upload params, verify cover file, retry
}
} Prevention
- Check the cover file exists and is a valid image before upload
- Use upload params fetched in the same session/flow
- Log the apply-upload response body for COS error details
- Retry with backoff if throttled
When it happens
Trigger: uploadCoverFile → apply-upload response lacks UploadID: invalid upload params, missing/oversized cover file, COS rejecting the request due to bad signature or throttling.
Common situations: Cover file path wrong or file unreadable (0 bytes sent), stale upload params, Shipinhao session expiry, or COS rate limiting.
Related errors
AI-assisted analysis of yikart/AiToEarn@d3aa8bea5b (2026-08-31).
Data as JSON: /api/errors/568c5afa82463646.
Report an issue: GitHub.
Appendix: source
Thrown at project/aitoearn-electron/electron/plat/shipinhao/index.ts:825
const uploadIdRes = await this.uploadFile(
this.getApplyUploadDfsUrl,
Buffer.from(
JSON.stringify({
BlockPartLength: [fileData.length],
BlockSum: 1,
}),
),
{
Authorization: uploadParams.authKey,
'Content-Type': 'application/json',
'X-Arguments': uploadArgumentsString,
},
undefined,
proxy,
);
if (!uploadIdRes.UploadID) {
throw new Error('上传封面失败,失败原因:获取上传id失败');
}
const uploadId = uploadIdRes.UploadID;
// 开始上传
const uploadPartRes = await this.uploadFile(
this.uploadpartdfsUrl +
`?UploadID=${uploadId}&PartNumber=1&QuickUpload=2`,
fileData,
{
Authorization: uploadParams.authKey,
'X-Arguments': uploadArgumentsString,
'Content-Type': 'application/octet-stream',
},
undefined,
proxy,
);
View on GitHub (pinned to d3aa8bea5b)