簡體   English   中英

將文件直接從表單發送到遠程服務器

[英]Send files from form directly to remote server

在我的應用程序中,我正在處理非常大的圖像文件的上傳。 它們將存儲在遠程服務器上,因此,根據我的了解,我需要編寫一些自定義存儲系統(可能使用python的poster模塊)。 由於大小,我想直接將文件發送到媒體服務器,而不將它們存儲在內存中(啟用“海報”功能)。 但是所有上載的文件均由UploadHandler類處理,該類強制以某種方式(文件,臨時文件或內存)將文件存儲在本地。 那么我該如何解決呢?

根據docs ,UploadedFile類應該具有一個chunks()方法,該方法返回一個生成器。 塊大小是可配置的(默認為2.5 MB)。 因此,您可以執行以下操作(從文檔中復制):

destination = open('some/file/name.txt', 'wb+')
for chunk in f.chunks():
    destination.write(chunk)
destination.close()

這將一個接一個的大塊讀入內存並將其寫入文件。 (因此,內存中一次只有一個塊)。 您可能想要將open()的路徑更改為NFS卷,然后每次調用write()只會將當前塊發送到NFS。 (NFS將所有文件操作(如open / write / read / seek / close導出為RPC)導出)。 Samba的工作原理與此類似。

另外,您還可以通過在媒體服務器上運行另一種服務來自己實現這種機制,該服務提供了將大塊附加到文件的方法。 (無論如何,我認為使用NFS或Samba是更好的選擇)。

您可能會發現xsendfile(snippet)或Web服務器的類似擴展有用。 但是您必須隨后從請求的計算機啟動連接。

暫無
暫無

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

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