gpt4 book ai didi

使用 boto 的 django-storages - 无法上传 mp3,但可以上传图像。另外,还承受着 HTTP 307 的痛苦

转载 作者:行者123 更新时间:2023-12-02 07:09:15 26 4
gpt4 key购买 nike

我正在使用 django-storages (1.1.4) 的 boto (2.2.1) 后端将文件上传到 S3 存储桶。它适用于图像,但当我尝试上传电影文件(小 mov、小 avi)或 mp3 时,我收到“管道损坏”错误。

这很奇怪。

深入研究 Django 回溯,我看到以下异常:

boto.https_connection.InvalidCertificateException

这符合我使用 Cyber​​duck 直接检查存储桶的体验:有时它会提示我的 *.s3.amazonaws.com 证书不匹配和域 *.s3-external-3.amazonaws.com

事实上,存储桶日志记录显示我正在接受 HTTP 307 临时重定向。 AWS 是否可能以一种方式发送某些内容类型,而以另一种方式发送其他内容类型,但 boto/something 无法完全跟上?电影的上传似乎确实击中了 S3 两次,而图像则击中了一次,因此 boto 很可能正在应对 307 罚款(boto 中 307 支持的封闭票据已经有几年了),因此它可以好吧,还有其他事情发生。

但是什么?我从愉快而富有成效的一天变成了低谷,这非常令人沮丧。

对于可能发生的情况和/或尝试解决此问题有什么建议吗?

(请注意,这对于 boto S3 后端或简单的 S3 后端会失败 - 只是 boto 给了我看起来更具体的错误)

最佳答案

我将其写为答案,因为它太长,无法容纳评论。它并不能真正回答您的问题,但也许可以帮助您找到答案。

您收到的 307 重定向正在发生,因为存储桶位于 eu-west-1 中,但您正在访问标准 s3.amazonaws.com 端点。 S3 使用一些 DNS 魔法和 HTTP 重定向将流量从通用 S3 端点路由到正确的区域端点。

为了实现此目的,大多数 S3 客户端使用“子域”引用方案,将存储桶名称添加到请求中的主机名前面。因此,如果您尝试访问您的存储桶,则请求中的 Host header 在 boto 中默认为 foofoofoo-bar.s3.amazonaws.com,然后使用 DNS 魔法和 HTTP 重定向,S3 最终会获取您的存储桶。请求到正确的地方。这一切都应该在 boto 中自动发生。

如果您的存储桶名称包含“.”,此方法可能会导致问题。因为主机 header 可能是 foofoofoo.bar.s3.amazonaws.com,并且由于 S3 端点上的通配符 SSL 证书仅适用于一级子域,因此存储桶名称中的句点会导致 SSL 证书验证失败.

这就是为什么我问“。”在你的存储桶名称中,但显然这不是问题。您是否可以从日志中提供更多上下文?我想看看证书验证错误之前发生了什么。

关于使用 boto 的 django-storages - 无法上传 mp3,但可以上传图像。另外,还承受着 HTTP 307 的痛苦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9119194/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com