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

求Python上传AWS WorkDocs示例代码,PUT请求遇签名不匹配错误

解决AWS WorkDocs上传时的SignatureDoesNotMatch错误

我来帮你搞定这个AWS WorkDocs的上传问题!你遇到的SignatureDoesNotMatch错误,核心原因是你用了requests的files参数,导致请求格式不符合WorkDocs的要求。

问题根源

当你使用upfile={'file': ('file.pdf', open('file.pdf', 'rb'), 'application/octet-stream')}作为put方法的参数时,requests会自动将请求的Content-Type改为multipart/form-data,还会添加额外的boundary分隔符和表单字段信息。但AWS WorkDocs期望的是纯二进制流的PUT请求(Content-Type为application/octet-stream),这种格式差异导致AWS计算的签名和你提供的签名不匹配。

正确的Python上传示例代码

你需要直接将文件的二进制内容作为请求体发送,而不是用files参数:

import requests

# 替换为你通过AWS API获取到的有效上传URL
workdocs_upload_url = "https://d91s3498sxxxxx.awsworkdocs.com/updocs/xxxxxx"

# 读取文件的二进制内容
with open("file.pdf", "rb") as pdf_file:
    file_binary = pdf_file.read()

# 设置正确的请求头
request_headers = {
    "Content-Type": "application/octet-stream"
}

# 发起PUT请求
response = requests.put(workdocs_upload_url, data=file_binary, headers=request_headers)

# 处理响应结果
if response.status_code == 200:
    print("文件成功上传到AWS WorkDocs啦!")
else:
    print(f"上传失败,状态码: {response.status_code}")
    print("错误详情:", response.text)

额外注意事项

  • 确保你使用的上传URL是通过AWS WorkDocs的API(比如CreateDocument或InitiateDocumentVersionUpload)生成的有效URL,这类URL通常有有效期,过期后需要重新生成。
  • 如果你的场景需要手动计算请求签名(比如没有使用AWS SDK自动签名),一定要确保签名是基于application/octet-stream的Content-Type和纯二进制请求体来计算的。
  • 对于大文件,建议使用分块上传的方式,但小文件用上面的方法就足够稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:13:05