makeplane/plane · error · Error
Asset upload failed. Please try again later.
Error message
Asset upload failed. Please try again later.
What it means
Thrown by uploadCommentAsset in the Space (public-issue-view) issue-detail store when fileService.uploadAsset rejects during a comment attachment upload. The original error is console.logged and then replaced with a user-facing 'Asset upload failed. Please try again later.' The entity_type is COMMENT_DESCRIPTION and entity_identifier is the commentID (or empty string when absent).
Source
Thrown at apps/space/store/issue-detail.store.ts:249
} catch (_error) {
console.log("Failed to add issue vote");
}
};
uploadCommentAsset = async (file: File, anchor: string, commentID?: string) => {
try {
const res = await this.fileService.uploadAsset(
anchor,
{
entity_identifier: commentID ?? "",
entity_type: EFileAssetType.COMMENT_DESCRIPTION,
},
file
);
return res;
} catch (error) {
console.log("Error in uploading comment asset:", error);
throw new Error("Asset upload failed. Please try again later.");
}
};
uploadIssueAsset = async (file: File, anchor: string, commentID?: string) => {
try {
const res = await this.fileService.uploadAsset(
anchor,
{
entity_identifier: commentID ?? "",
entity_type: EFileAssetType.ISSUE_DESCRIPTION,
},
file
);
return res;
} catch (error) {
console.log("Error in uploading comment asset:", error);
throw new Error("Asset upload failed. Please try again later.");
}View on GitHub (pinned to 1c8a60f858)
Solutions
- Check the console: the original error is logged as `Error in uploading comment asset:` immediately before the re-throw — open devtools to see the real HTTP status.
- Confirm the publish anchor passed in is still valid (reload the public page to get a fresh anchor) before retrying.
- Reduce the file size / change format and retry; most uploadAsset failures on Space are size or type rejections.
- If the error persists, verify the Space backend asset endpoint and S3/asset storage are healthy.
Example fix
// before: original cause discarded
} catch (error) {
console.log("Error in uploading comment asset:", error);
throw new Error("Asset upload failed. Please try again later.");
}
// after: surface the cause so the caller can react (size vs auth vs network)
} catch (error) {
throw new Error(`Asset upload failed: ${error instanceof Error ? error.message : "unknown"}`);
} Defensive patterns
Strategy: validation
Validate before calling
// Validate file + anchor before calling uploadCommentAsset
const MAX = 5 * 1024 * 1024; // 5MB example
const allowed = ['image/png','image/jpeg','image/gif','image/webp'];
if (file.size > MAX) throw new Error('File too large');
if (!allowed.includes(file.type)) throw new Error('Unsupported type');
if (!anchor) throw new Error('Missing publish anchor'); Type guard
const hasPublishAnchor = (a: unknown): a is string => typeof a === 'string' && a.length > 0;
Try / catch
try { await uploadCommentAsset(file, anchor, commentID); }
catch (e) { setUploadError('Attachment upload failed. Check size and try again.'); } Prevention
- Validate file size/type at the dropzone before invoking the store action.
- Reload the public page if the anchor may be stale before attaching.
- Inspect the console 'Error in uploading comment asset:' line for the real HTTP status.
When it happens
Trigger: Calling uploadCommentAsset with a file whose upload the backend rejects: file too large (size limit), unsupported MIME type, expired/missing anchor (publish anchor token), the publish settings for that anchor revoked, network drop mid-upload, or S3/presigned-URL failure surfaced as a non-2xx from uploadAsset. Also triggered when commentID is omitted for a flow that requires it (entity_identifier becomes empty string).
Common situations: Public viewer attaching a screenshot to a comment on a published issue; anchor (the public-access token in the URL) expired between page load and upload; reverse proxy limiting body size below Plane's asset size cap; user on a flaky mobile network.
Related errors
AI-assisted analysis of makeplane/plane@1c8a60f858 (2026-08-12).
Data as JSON: /api/errors/d33b3e2d3143343d.
Report an issue: GitHub.