社区上传
上传需要身份验证、同源请求,并受审核流程控制。新帖子上传支持 JPEG、PNG、WebP、GIF、HEIC、HEIF、MP4、MOV 和 WebM。历史文本附件仍可读取,但不再接受新的文本 intent。
GET /api/v1/community/uploads/policy响应包含当前 limits 对象,其中包括 multipart 分片大小、文件大小以及每篇帖子可关联的附件上限。请将其视为当前部署的权威值。
当前公开策略报告 partBytes: 8388608、fileBytes: 134217728、attachmentsPerPost: 16 和 videoSeconds: 600。如果部署改变这些值,请使用策略响应中的值。
创建上传 intent
Section titled “创建上传 intent”POST /api/v1/community/uploads/intentsIdempotency-Key: upload-intent-20260930-uniqueContent-Type: application/json
{ "fileName": "cover.webp", "mediaType": "image/webp", "size": 123456}Idempotency-Key 是 16–128 个安全字符。使用相同 metadata 重用该键时返回已有附件;修改 metadata 时返回 409 idempotency_conflict。响应为 201 并包含附件描述符:
{ "attachment": { "id": "attachment-id-from-the-service", "fileName": "cover.webp", "mediaType": "image/webp", "size": 123456, "status": "reserved", "moderationStatus": "pending", "uploadUrl": "/api/v1/community/uploads/{attachmentId}/content", "multipart": { "partSize": 8388608, "partCount": 1, "partUploadUrl": "/api/v1/community/uploads/{attachmentId}/parts/{partNumber}", "completeUrl": "/api/v1/community/uploads/{attachmentId}/complete", "cancelUrl": "/api/v1/community/uploads/{attachmentId}/multipart" }, "downloadUrl": null, "failureCode": null, "expiresAt": 1730000000000 }}上面 URL 中的占位符需要替换为返回的附件 ID;不要原样发送。
对于单分片 intent:
PUT /api/v1/community/uploads/{attachmentId}/contentContent-Type: application/octet-streamContent-Length: 123456
<exact bytes>对于 multipart:
PUT /api/v1/community/uploads/{attachmentId}/parts/{partNumber}Content-Type: application/octet-streamContent-Length: <planned-part-size>
<exact part bytes>服务器会校验计划中的准确 content length。分片响应包含 { "part": { "partNumber", "byteSize", "etag" }, "attachment": ... }。
完成 multipart 上传:
POST /api/v1/community/uploads/{attachmentId}/completeContent-Type: application/json
{ "parts": [ { "partNumber": 1, "etag": "etag-returned-by-the-part-upload" } ]}只有当服务已经拥有完整且有序的分片列表时,parts 字段才可以省略。完成操作会校验对象大小和文件容器,然后返回带有 status: scanning 的 202。媒体处理会在审核后发布变体。
取消未完成的 multipart 上传:
DELETE /api/v1/community/uploads/{attachmentId}/multipartGET /api/v1/community/attachments/{attachmentId}DELETE /api/v1/community/attachments/{attachmentId}POST /api/v1/community/posts/{postId}/attachments{ "attachmentIds": ["attachment-id-from-the-service"] }DELETE /api/v1/community/posts/{postId}/attachments/{attachmentId}只有所有者可以检查、删除或关联帖子附件。关联要求 status=ready 且 moderationStatus=allow;一篇帖子最多包含策略规定的数量(当前为 16 个)。就绪内容通过公开的 downloadUrl 或附件内容路由下载。
reserved 表示字节仍在上传;scanning 表示验证/审核正在运行;ready 和 allow 使内容可用;review、rejected 和 deleted 的内容不能关联。当响应为 202 时,请使用退避策略继续轮询 metadata 接口。