2010-10-13 86 views
1

在我的應用程序中,我正在處理上傳真正大的圖像文件。他們將存儲在遠程服務器上,所以從我所能學到的東西中我需要編寫一些定製的存儲系統(可能使用python的poster模塊)。由於尺寸的原因,我希望直接將文件發送到媒體服務器,而不將它們存儲在內存中(「海報」允許)。但所有上傳的文件都由UploadHandler類處理,這會強制文件以某種方式(文件,temp或內存)本地存儲。那麼我怎樣才能解決這個問題?將文件從表單直接發送到遠程服務器

回答

0

根據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 as RPC)。桑巴工作原理類似。

或者,您也可以通過在媒體服務器上運行另一個服務來實現這種機制,該服務提供了將文件追加到文件的方法。 (無論如何,在我看來,使用NFS或Samba將是更好的選擇)。

+0

但我仍然會發送這個數據後運行存儲。或者我錯了? – mizou 2010-10-13 23:06:33

0

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

+0

不幸的是這不是一個選項 – mizou 2010-10-13 23:04:39

相關問題