Ste*_*lim 6 django amazon-s3 boto amazon-web-services django-storage
我使用boto(2.2.1)后端用于django-storages(1.1.4)将文件上传到S3存储桶.它适用于图像,但是当我尝试上传电影文件(小型电影,小型AVI)或mp3时,我收到了一个Broken管道错误.
这很怪异.
深入研究Django回溯,我看到以下异常:
boto.https_connection.InvalidCertificateException
Run Code Online (Sandbox Code Playgroud)
哪种方式符合我使用Cyberduck直接检查存储桶的经验:有时它抱怨我在证书*.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 标头默认情况下在 boto 中为 foofoofoo-bar.s3.amazonaws.com,然后使用 DNS 魔法和 HTTP 重定向,S3 最终会获取您的存储桶。请求到正确的地方。这一切都应该在博托自动发生。
如果您的存储桶名称包含“.”,此方法可能会导致问题。因为主机标头可能是 foofoofoo.bar.s3.amazonaws.com,并且由于 S3 端点上的通配符 SSL 证书仅适用于一级子域,因此存储桶名称中的句点会导致 SSL 证书验证失败。
这就是为什么我问“。” 在您的存储桶名称中,但显然这不是问题。您是否可以从日志中提供更多上下文?我想看看证书验证错误之前发生了什么。
| 归档时间: |
|
| 查看次数: |
1451 次 |
| 最近记录: |