【问题标题】:AWS broken pipe error when uploading files bigger than 1 MB上传大于 1 MB 的文件时出现 AWS 损坏的管道错误
【发布时间】:2017-11-18 14:33:41
【问题描述】:

我是一个 django 新手,我继承了一个 django 后端,几乎没有文档。我正在向托管在 AWS 上的所述服务器发出请求。要将文件存储在请求中,我们使用 S3。 我在 django 代码上没有发现任何限制文件上传大小的内容,我怀疑可能是 AWS 由于文件大小而关闭了连接。

这是我使用的代码,只要文件的总大小超过 1 MB,就会出现以下错误:

import requests
json_dict = {'key_1':'value_1','video':video,'image':,image}
requests.post('https://api.test.whatever.io/v1/register', json=dict_reg)

video是base64编码的视频文件('.mov'、'.avi'、'.mp4'等),image是base64编码的图像文件('.jpg'、'.png') .

这是我得到的跟踪,仅当总大小超过 1 MB 时:

/usr/local/lib/python2.7/dist-
packages/requests/packages/urllib3/util/ssl_.py:132: InsecurePlatfo
rmWarning: A true SSLContext object is not available. This prevents urllib3 
from configuring SSL
appropriately and may cause certain SSL connections to fail. You can upgrade 
to a newer version of Python to solve this. For more information, see 
https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecurePlatformWarningTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 110, in 
post
return request('post', url, data=data, json=json, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 56, in 
request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 
488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 
609, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 
473, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', error(32, 
'Broken pipe'))

如前所述,我在 django 代码中的任何地方都没有发现文件大小的限制,我应该在哪里查看任何提示? 我也没有在 AWS S3 政策中找到任何内容。

【问题讨论】:

  • 当您说 MG 时,您是指 MB 吗?你是在开发服务器还是生产网络服务器上?
  • 是的,对不起,MB。它发生在(生产和开发)两者上。

标签: django amazon-s3 broken-pipe


【解决方案1】:

假设你有一个 Nginx 来反向代理你的 HTTP 请求?如果是,请检查此link

另请参阅 django 中的上传处理程序设置中为以下值设置的值

FILE_UPLOAD_MAX_MEMORY_SIZE

【讨论】:

  • 谢谢。有一个变量 FILE_UPLOAD_MAX_MEMORY_SIZE 但它在代码中没有被调用。我会检查你的链接。谢谢。
  • 不客气。它不会在代码中直接调用,而是被 Django 用来管理上传。在绕过 Nginx 代理使用时,设置更高的值不会防止超时。
  • 好点。实际上问题出在 nginx.conf 文件上,见下文。
  • 不客气,但我希望你意识到你现在已经把罐子踢开了(直到你需要上传 2mb 的文件)。您可以完全绕过 nginx 进行文件上传,这将防止在 nginx 端进行缓冲。如果我的回答有帮助,请将其标记为已接受,以帮助其他有相同问题的人(对我来说还有一个小问题:D)。
【解决方案2】:

最后是nginx 配置。将nginx.conf文件中的变量client_max_body_size1M更改为2M就可以了。

【讨论】:

    猜你喜欢
    • 2015-07-13
    • 2018-08-27
    • 2014-03-04
    • 1970-01-01
    • 2021-09-22
    • 2016-07-21
    • 1970-01-01
    • 2018-06-05
    • 2012-03-26
    相关资源
    最近更新 更多