Uploaded Files and Upload Handlers
- class [源代码]
Read the entire uploaded data from the file. Be careful with this method:if the uploaded file is huge it can overwhelm your system if you try toread it into memory. You'll probably want to use
chunks()
instead; seebelow.UploadedFile.
multiplechunks
(_chunk_size=None)Returns
True
if the uploaded file is big enough to require reading inmultiple chunks. By default this will be any file larger than 2.5 megabytes,but that's configurable; see below.- A generator returning chunks of the file. If
multiple_chunks()
isTrue
, you should use this method in a loop instead ofread()
.
In practice, it's often easiest simply to use chunks()
all the time.Looping over chunks()
instead of using read()
ensures that largefiles don't overwhelm your system's memory.
Here are some useful attributes of UploadedFile
:
UploadedFile.
name
The name of the uploaded file (e.g.
my_file.txt
).The size, in bytes, of the uploaded file.
The content-type header uploaded with the file (e.g. text/plain_or _application/pdf). Like any data supplied by the user, youshouldn't trust that the uploaded file is actually this type. You'll stillneed to validate that the file contains the content that the content-typeheader claims — "trust but verify."
UploadedFile.
content_type_extra
A dictionary containing extra parameters passed to the
content-type
header. This is typically provided by services, such as Google App Engine,that intercept and handle file uploads on your behalf. As a result yourhandler may not receive the uploaded file content, but instead a URL orother pointer to the file. (see RFC 2388 section 5.3).UploadedFile.
charset
- For text/* content-types, the character set (i.e.
utf8
)supplied by the browser. Again, "trust but verify" is the best policy here.
注解
Lines are split using universal newlines. The following are recognizedas ending a line: the Unix end-of-line convention '\n'
, the Windowsconvention '\r\n'
, and the old Macintosh convention '\r'
.
Subclasses of include:
- class
TemporaryUploadedFile
A file uploaded to a temporary location (i.e. stream-to-disk). This classis used by the. Inaddition to the methods from
UploadedFile
, it has one additionalmethod:Returns the full path to the temporary uploaded file.
- A file uploaded into memory (i.e. stream-to-memory). This class is usedby the .
Together the MemoryFileUploadHandler
and provide Django's default file uploadbehavior of reading small files into memory and large ones onto disk. Theyare located in django.core.files.uploadhandler
.
- class
MemoryFileUploadHandler
[源代码] File upload handler to stream uploads into memory (used for small files).
- Upload handler that streams data into a temporary file using
TemporaryUploadedFile
.
- class
FileUploadHandler
- All file upload handlers should be subclasses of
django.core.files.uploadhandler.FileUploadHandler
. You can define uploadhandlers wherever you wish.
Custom file upload handlers must define the following methods:
FileUploadHandler.
receivedata_chunk
(_raw_data, start)- Receives a "chunk" of data from the file upload.
raw_data
is a bytestring containing the uploaded data.
start
is the position in the file where this raw_data
chunkbegins.
The data you return will get fed into the subsequent upload handlers'receive_data_chunk
methods. In this way, one handler can be a"filter" for other handlers.
Return None
from receive_data_chunk
to short-circuit remainingupload handlers from getting this chunk. This is useful if you'restoring the uploaded data yourself and don't want future handlers tostore a copy of the data.
If you raise a StopUpload
or a SkipFile
exception, the uploadwill abort or the file will be completely skipped.
The handler should return an UploadedFile
object that will be storedin request.FILES
. Handlers may also return None
to indicate thatthe UploadedFile
object should come from subsequent upload handlers.
Optional methods
FileUploadHandler.
chunk_size
- Size, in bytes, of the "chunks" Django should store into memory and feedinto the handler. That is, this attribute controls the size of chunksfed into .
For maximum performance the chunk sizes should be divisible by 4
andshould not exceed 2 GB (231 bytes) in size. When there aremultiple chunk sizes provided by multiple handlers, Django will use thesmallest chunk size defined by any handler.
The default is 64*210 bytes, or 64 KB.
FileUploadHandler.
newfile
(_field_name, file_name, content_type, content_length, charset, content_type_extra)- Callback signaling that a new file upload is starting. This is calledbefore any data has been fed to any upload handlers.
field_name
is a string name of the file <input>
field.
file_name
is the filename provided by the browser.
content_type
is the MIME type provided by the browser — E.g.'image/jpeg'
.
content_length
is the length of the image given by the browser.Sometimes this won't be provided and will be None
.
charset
is the character set (i.e. utf8
) given by the browser.Like content_length
, this sometimes won't be provided.
content_type_extra
is extra information about the file from thecontent-type
header. See .
This method may raise a StopFutureHandlers
exception to preventfuture handlers from handling this file.
FileUploadHandler.
upload_complete
()[源代码]Callback signaling that the entire upload (all files) has completed.
FileUploadHandler.
handleraw_input
(_input_data, META, content_length, boundary, encoding)[源代码]- Allows the handler to completely override the parsing of the rawHTTP input.
input_data
is a file-like object that supports read()
-ing.
META
is the same object as request.META
.
content_length
is the length of the data in input_data
. Don'tread more than content_length
bytes from input_data
.
boundary
is the MIME boundary for this request.
encoding
is the encoding of the request.