簡體   English   中英

使用Python / Django上傳大文件

[英]Uploading large files with Python/Django

我想知道使用Django / Python通過Web應用程序上傳大小約為4GB的文件是否有任何后果? 我記得在過去使用Java的流式上傳是首選的方法但是今天仍然這樣做或者使用Django / Python這樣做是否完全安全?

Django默認情況下,如果上傳的文件數據小於2.5MB,則將其放入內存中。 更大的內容將寫入服務器的/tmp目錄,然后在傳輸完成時復制。 許多Django的文件上傳設置都可以自定義, 文檔中提供了詳細信息。 您還可以自定義文件處理,您當然希望這樣做。

在我們考慮任何技術限制之前,使用瀏覽器上傳這些大文件會給用戶帶來非常糟糕的體驗。 沒有關於傳輸方式的反饋(盡管谷歌瀏覽器確實以百分比顯示上傳狀態)並且無法暫停或恢復傳輸。

您也可能在服務器上遇到問題。 除了處理流數據每個線程的極長時間外,您還有時間讓系統將生成的文件從/tmp復制到正確的位置。

除非您非常有信心可以預見到服務器可能與上傳有任何問題,否則我建議這是一個壞主意。 很難通過谷歌找到這方面的任何信息,似乎有很多描述大文件上傳問題的點擊。

雖然Django在技術上能夠接收這么大的上傳文件,但非常糟糕的用戶體驗和技術難度意味着這可能不是最好的方法。 您是否考慮過使用專用軟件來處理文件傳輸?

最后的答案涵蓋了它。 我們經常上傳2.5mb +(但通常不是4gb)

adamnish鏈接是正確的,請參閱此代碼段(從他的鏈接到django docs )關於將文件寫入磁盤,而不是先將其放入內存:

def handle_uploaded_file(f):
    with open('some/file/name.txt', 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)

有關“chunks”調用的更多信息: https//docs.djangoproject.com/en/dev/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile.chunks

頁面包括如何設置“塊”大小等。

對於未來的讀者:要在內存存儲中允許最大文件大小 ,請在settings.py以下內容:

FILE_UPLOAD_MAX_MEMORY_SIZE = 5242880 # make it 5Mb instead of 2Mb

當然這對4Gb沒有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM