Django--Uploaded Files以及Handlers


一、表示已經上傳的文件(uploaded files)的類

表示已經上傳的文件的類有下面幾個:

class UploadedFile

在文件上傳的期間,實際的文件數據被存儲在request.FILES。在這個字典中的每一項都是一個UploadedFile對象或者是子類的對象。這是一個對已經上傳文件的簡單封裝,你可以通過以下方法進行訪問上傳的內容。

方法:

        read()

        從該文件中讀取整塊上傳的數據,使用這個方法必須小心,如果該上傳的文件特別大,它將使得你的系統崩潰,相反你可以使用chunks()方法來一小塊小塊的讀取到內存中。

        multiple_chunks(chunk_size=None)

        如果上傳的文件足夠大需要在多個塊(chunks)中進行讀取,將會返回True。默認情況下,這將會是任何大於2.5 MB的文件,但是這個是可以配置的。

        chunks()

        這個一個返回文件chunks的生成器。如果multiple_chunks()為True,你應該在循環中使用這個方法而不是read()。

        實際上,經常最簡單的使用方法是總是使用chunks()。然后循環這個chunks()方法而不是使用read(),這樣確保大文件不會過分占用你的系統內存。

屬性 :

        name

        上傳過的文件的文件名

        size

        上傳過的文件的文件大小

        content_type

        伴隨這個上傳文件的content-type頭部。(例如:text/plain或者application/pdf)。與用戶提供的任何數據一樣,您不應該相信上傳的文件實際上是這種類型的。您仍然需要驗證該文件包含的內容是否是content-type頭部聲明的。trust but verify。

        content_type_extra

        這是一個字典,包含了額外的傳入content-type的參數。這個通常是由諸如Google App Engine服務提供的,這將攔截這個文件並代表你處理這個文件。結果是你的處理器可能不會接收到上傳文件的內容,相反是一個URL或者其他指向這個文件的指針。

        charset

        字符集,對於text/* content-types,這個設置(例如 utf-8)由瀏覽器提供。trust but verify。

注意:

        例如常規的Python文件,你可以僅僅迭代這個上傳的文件來一行一行讀取這個文件。

                for line in uploadedfile

                        do_someting_with(line)

UploadFile的子類包括:

class TemporaryloadedFile

        一個上傳至臨時文件的(i.e. stream-to-disk)位置。這個類通常被TemporaryFileUploadHandler。除了UploadedFile的方法外,還有一個額外的方法。

方法:

        temporary_file_path()

        返回這個臨時上傳文件的完整路徑。

class InMemoryUploadedFile

        放入內存中上傳過的文件。(i.e. stream-to-memoey)。這個類通常由MemoryFileUploadHandler使用。

二、內建的上傳處理器

        MemoryFileUploadHandler和TemporaryFileUploadHandler這個兩個處理器分別提供django上傳的文件默認行為,讀取小文件到內存中,讀取大文件到磁盤中。

他們都位於django.core.files.uploadhandler中,前者用於小文件,該處理器流上傳至內存中,后者使用TemporaryUploadFile,將數據流入一個臨時的文件。

三、自定義上傳處理器

class FileUploadHandler,自定義處理器必須是該子類,位於django.core.files.uploadedhandler.FileUploadHander。

 

 

         

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM