【问题标题】:React.js & Django S3 Upload Dilemma 403/Signature Does Not MatchReact.js 和 Django S3 上传困境 403/签名不匹配
【发布时间】:2018-08-22 05:19:38
【问题描述】:

我正在尝试在我的网站上添加一个功能,用户可以在其中上传声音(mp3/wav/等),它们将存储在 s3 中的 bucketname/audio/username/sound.mp3 下,但我一直收到 403我的 django 后端返回签名的 url 后出现错误。我已经以 500 种不同的方式配置了我的存储桶来尝试让它工作,我将在下面分享我当前的设置,所以让我知道这是否仍然是问题,但此时我不知道问题出在哪里一点也不。我的 django 后端很好地返回了签名的 url,并且两个 url 匹配,但我收到此错误 when clicking on the returned aws url 。控制台中出现此错误which is returned after the get request to django。我一直在绞尽脑汁想弄清楚可能出了什么问题,但我已经没有东西可以尝试了。这是我当前的存储桶策略、IAM 策略,以及 django 和 react 代码(我使用的是一个名为 react-s3-uploader 的库)。

CORS

IAM

Django (right above is the access key and secret imported from env variables so thats not the problem)

React Component

任何帮助将不胜感激!

【问题讨论】:

  • 显然有人在使用完全相同的反应组件时遇到了类似的问题,但这似乎与 s3 很奇怪。 stackoverflow.com/questions/45848379/…。我可以上传图片/mp4/pdf,但 mp3 或 wav 似乎不起作用,只给我一个 403。有人碰巧知道为什么吗?似乎是一个非常奇怪的怪癖,我无法想象你不能将声音上传到 s3,因为我很确定 soundcloud 使用 s3 进行存储。

标签: django reactjs amazon-web-services amazon-s3


【解决方案1】:

我不知道这是否有帮助,但我遇到了类似的问题,如下所示。我相信这是因为 Content-Type 的标头需要匹配文件的元数据:

def sign_s3_upload(request):
    object_name = request.GET['objectName']
    content_type = mimetypes.guess_type(object_name)[0]
    if content_type == 'audio/x-wav':
        content_type = 'audio/wav'

    signed_url = conn.generate_url(
        300,
        "PUT",
        settings.AWS_STORAGE_BUCKET_NAME,
        'uploads/' + object_name,
        headers = {'Content-Type': content_type,
                   'x-amz-acl': 'public-read',
                   })


    return HttpResponse(json.dumps({'signedUrl': signed_url}))

【讨论】:

  • 我也是这样解决的!不过,感谢您的回应。保重
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多