Tornado服务器无法接收大文件

时间:2016-04-18 08:24:07

标签: rest python-3.x tornado

您好我正在尝试实现一个Tornado服务器,其目标是在POST主体中接收非常大的二进制文件(~1GB)。以下代码适用于小文件,但如果我尝试发送大文件(~100MB)则无法回答。

class ReceiveLogs(tornado.web.RequestHandler):  
   def post(self):    
      file1 = self.request.body
      output_file = open('./output.zip', 'wb')
      output_file.write(file1)
      output_file.close()        
      self.finish("file is uploaded")

你知道任何解决方案吗?

1 个答案:

答案 0 :(得分:2)

我没有一个真正的实现作为答案,但有一两个评论希望指向正确的方向。

首先,有一个100MB的上传限制,可以通过设置

来增加
self.request.connection.set_max_body_size(size) 

在Request处理程序的初始化中。 (taken from this answer

问题是龙卷风处理内存中的所有文件上传(并且HTTP不是用于处理大型文件上传的非常可靠的协议。) 这是2014年来自tornadoweb团队成员的引用(see github issue here

  

...您可以使用max_buffer_size参数调整此限制   HTTPServer构造函数,虽然我不认为这是一个好主意   将此值设置为大于100MB。

     

Tornado目前不支持非常大的文件上传。更好   支持即将到来(#1021)并且nginx上传模块很受欢迎   在此期间解决方法。但是,我建议不要做1GB +   在任何情况下都可以在单个HTTP POST中上传,因为单独的HTTP不会   有良好的支持恢复部分完成的上传(在   除上述错误问题外)。考虑一个多步骤   上传过程,如Dropbox的chunked_upload和commit_chunked_upload   (https://www.dropbox.com/developers/core/docs#chunked-upload

如上所述,我建议您执行以下操作之一: