You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django调用Basecamp 3 API上传图片至评论报422错误求助

解决Basecamp 3待办事项带预览图片评论的422错误问题

核心问题分析

你的问题出在评论API的请求格式和<bc-attachment>标签的使用逻辑上:

  • 用application/json提交时,Basecamp无法正确解析附件标签,导致图片仅能完成上传但无法生成预览;
  • 422错误大概率是请求参数缺失、attachable_sgid无效,或是请求头/格式不符合Basecamp的要求。

具体解决步骤

1. 确保附件上传流程完全合规

上传图片到Attachments API时,必须严格使用multipart/form-data格式,参数需匹配官方要求:

import requests

# 假设已通过OAuth2获取有效access_token,basecamp_domain为你的实例域名
upload_url = f"https://{basecamp_domain}/3/{account_id}/attachments.json"
headers = {"Authorization": f"Bearer {access_token}"}

# 读取本地保存的用户上传图片
with open(local_image_path, "rb") as img_file:
    files = {
        "file": img_file,
        "name": "comment_image.jpg"  # 文件名需匹配图片实际格式
    }
    response = requests.post(upload_url, headers=headers, files=files)

# 验证上传结果,获取有效attachable_sgid
if response.status_code == 201:
    attachable_sgid = response.json()["attachable_sgid"]
else:
    # 打印错误详情排查上传环节问题
    print(response.json())

注意:attachable_sgid为一次性有效且有时间限制,需在获取后立即用于评论请求。

2. 调用评论API的正确格式

评论API必须使用application/x-www-form-urlencoded格式提交,不能用application/json,且content字段要正确嵌入附件标签:

comment_url = f"https://{basecamp_domain}/3/{account_id}/buckets/{bucket_id}/recordings/{todo_id}/comments.json"
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/x-www-form-urlencoded"
}

# 构建带附件标签的评论内容,标签需严格闭合,sgid替换为上传后获取的值
comment_content = f"这是带图片的评论 <bc-attachment sgid=\"{attachable_sgid}\"></bc-attachment>"

# 表单格式的请求参数,content为必填项
data = {
    "content": comment_content
}

response = requests.post(comment_url, headers=headers, data=data)

# 排查422错误:打印返回的具体错误信息
if response.status_code == 422:
    print("错误详情:", response.json())
elif response.status_code == 201:
    print("评论提交成功")

3. 422错误的常见排查点

如果仍出现422错误,优先检查以下内容:

  • attachable_sgid有效性:确认附件上传请求返回201,且sgid未过期;
  • 必填参数完整性:评论API需确保bucket_id、待办事项ID(即record_id)、content参数全部正确;
  • 标签格式正确性:<bc-attachment>标签必须用双引号包裹sgid,且标签需闭合;
  • 权限验证:OAuth2令牌需拥有write权限,确保能操作目标待办事项。

4. 图片预览验证

提交成功后,Basecamp会自动解析<bc-attachment>标签生成带预览的图片评论。如果仍显示空白,检查上传的图片是否损坏,或格式是否为Basecamp支持的类型(如JPG、PNG等)。

内容的提问来源于stack exchange,提问作者Vidian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 18:17:52