1. 程式人生 > >Django檔案上傳的原理

Django檔案上傳的原理

1. 當Django在處理檔案上傳的時候,檔案資料被儲存在request.FILES。當用戶上傳一個檔案的時候,Django會把檔案資料傳遞給上傳處理器,一個小型的類,會在檔案資料上傳時處理它。上傳處理器在FILE_UPLOAD_HANDLERS中定義,預設為:("django.core.files.uploadhandler.MemoryFileUploadHandler",
"django.core.files.uploadhandler.TemporaryFileUploadHandler",)
MemoryFileUploadHandler和TemporaryFileUploadHandler一起提供了Django的預設檔案上傳行為,將小檔案讀取到記憶體中,大檔案放置在磁碟中,你可以編寫自定義的處理器,來定製Django如何處理檔案。例如:你可以使用自定義處理器來限制使用者級別的配額,在執行中壓縮資料,渲染進度條,甚至是向另一個儲存位置直接傳送資料,而不把它存到本地。

2. 上傳資料在哪裡儲存,在你儲存上傳檔案之前,資料需要儲存在某個地方。
通常,如果上傳檔案小於2.5MB,Django會把整個內容存到記憶體。這意味著,檔案的儲存僅僅涉及到從記憶體讀取和寫到磁碟,所以非常快。但是,如果上傳的檔案很大,Django會把它寫入一個臨時檔案,儲存在你係統的臨時目錄中,在類Unix的平臺下,你可以認為Django生成了一個檔案,名稱類似於/tmp/tmpzfp6I6.upload,如果上傳的檔案足夠大,你可以觀察到檔案大小的增長,由於Django向磁碟寫入資料。這些特定值 – 2.5 MB,/tmp,以及其它 -- 都僅僅是"合理的預設值",它們可以自定義