2016-04-18 116 views
0

您好我想實現一個Tornado服務器的目標是接收非常大的二進制文件(〜1GB)進入POST機構。下面的代碼適用於小文件,但如果我嘗試發送大文件(〜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") 

您是否知道任何解決方案?

回答

2

我沒有一個真正的實現作爲答案,但有一兩個評論希望指向正確的方向。

首先有一個100MB的上傳限制可以增加在請求處理程序中的初始化設置

self.request.connection.set_max_body_size(size) 

。 (taken from this answer

IST是龍捲風的問題處理所有的文件上傳在內存中(和HTTP是不是爲處理大文件上傳一個非常可靠的協議。) 這是從tornadoweb團隊從2014年起的成員引號(see github issue here

...您可以用max_buffer_size參數傳遞給 的HttpServer構造調整這個限制,雖然我不認爲這將是一個好主意 設置這個不如說是100MB的。

Tornado目前不支持非常大的文件上傳。更好的 支持即將到來(#1021),同時nginx上傳模塊是一種流行的 解決方法。但是,在任何情況下,我都建議不要在單個HTTP POST中進行1GB + 上傳,因爲僅有HTTP不支持 以恢復部分完成的上傳(除 除了上述錯誤問題外)。考慮像Dropbox的的chunked_upload和commit_chunked_upload一個多步驟的 上傳過程 (https://www.dropbox.com/developers/core/docs#chunked-upload

如前所述,我會建議做以下之一: