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

Django中Uppy对接DigitalOcean Spaces时出现AttributeError问题求助

Django中Uppy对接DigitalOcean Spaces时出现AttributeError问题求助

嘿,我碰到过类似的问题,来帮你排查下!你现在遇到的AttributeError: 'dict' object has no attribute 'status_code',主要是两个地方出了问题,咱们一步步来解决:

1. Django视图返回格式不对

你的后端视图直接return了一个字典,但Django视图要求返回合法的HTTP响应对象。要是直接return字典,Django会把它当成模板渲染的上下文,而不是JSON响应,这会导致前端fetch请求解析失败,Uppy拿到的不是预期的参数结构,从而触发这个错误。

修正方法:用Django的JsonResponse来返回参数,代码改成这样:

from django.http import JsonResponse
import boto3
from botocore.config import Config

def uppy_s3_view(request):
    # 初始化DigitalOcean Spaces客户端
    client = boto3.client(
        's3', 
        region_name='sgp1', 
        endpoint_url='https://sgp1.digitaloceanspaces.com', 
        aws_access_key_id=SPACES_KEY, 
        aws_secret_access_key=SPACES_SECRET, 
        config=Config(s3={'addressing_style': 'virtual'})
    )
    
    # 生成PUT方法的预签名URL(之前用get_object是错的,那是下载用的)
    url = client.generate_presigned_url(
        ClientMethod='put_object',
        Params={
            "Bucket": "mysite-bucket",
            "Key": "uppyfile.pdf"  # 建议改成动态获取前端传的文件名,比如request.GET.get('filename')
        },
        ExpiresIn=3600
    )
    
    # 用JsonResponse返回参数
    return JsonResponse({
        "method": "PUT",
        "url": url,
        "headers": {
            "content-type": "application/pdf"  # 同样建议动态获取前端的file.type
        }
    })

2. 预签名URL的生成方法用错了

你之前用get_object生成的是用于下载文件的GET预签名URL,但Uppy上传需要的是PUT方法的预签名URL,所以必须改成put_object,不然上传时会因为请求方法不匹配或者权限问题失败。

另外还有两个小提醒:

  • 别硬编码文件名和content-type,最好从前端Uppy的file对象里获取相关信息,比如前端可以把file.name和file.type通过fetch传给后端,后端动态生成对应的Key和content-type,这样能支持多种文件类型。
  • 确保你的DigitalOcean Spaces Bucket的CORS配置允许PUT请求,并且放行你的前端域名,不然会出现跨域错误。CORS配置大概是这样的:
    <CORSConfiguration>
      <CORSRule>
        <AllowedOrigin>你的前端域名,比如https://your-site.com</AllowedOrigin>
        <AllowedMethod>PUT</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
      </CORSRule>
    </CORSConfiguration>
    

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 03:08:20