Uppladdade filer och uppladdningshanterareLink to this heading
Uppladdade filerLink to this heading
- class UploadedFileLink to this definition
Under filuppladdningar lagras de faktiska filuppgifterna i request.FILES. Varje post i denna ordbok är ett UploadedFile-objekt (eller en underklass) - ett omslag runt en uppladdad fil. Du kommer vanligtvis att använda en av dessa metoder för att komma åt det uppladdade innehållet:
- UploadedFile.read()Link to this definition
Läs hela den uppladdade datan från filen. Var försiktig med den här metoden: om den uppladdade filen är enorm kan den överbelasta ditt system om du försöker läsa in den i minnet. Du vill förmodligen använda
chunks()istället; se nedan.
- UploadedFile.multiple_chunks(chunk_size=None)Link to this definition
Returnerar
Trueom den uppladdade filen är tillräckligt stor för att kräva läsning i flera bitar. Som standard kommer detta att vara alla filer som är större än 2,5 megabyte, men det är konfigurerbart; se nedan.
- UploadedFile.chunks(chunk_size=None)Link to this definition
En generator som returnerar bitar av filen. Om
multiple_chunks()ärTrue, bör du använda denna metod i en loop istället förread().I praktiken är det ofta enklast att använda
chunks()hela tiden. Att loopa överchunks()istället för att användaread()säkerställer att stora filer inte överväldigar systemets minne.
Här är några användbara attribut för UploadedFile:
- UploadedFile.nameLink to this definition
Namnet på den uppladdade filen (t.ex.
my_file.txt).
- UploadedFile.sizeLink to this definition
Storleken i byte på den uppladdade filen.
- UploadedFile.content_typeLink to this definition
Den innehållstyp som laddades upp med filen (t.ex. text/plain eller application/pdf). Som med alla data som tillhandahålls av användaren bör du inte lita på att den uppladdade filen faktiskt är av den här typen. Du måste fortfarande validera att filen innehåller det innehåll som innehållstypsrubriken anger - ”lita på men verifiera”
- UploadedFile.content_type_extraLink to this definition
En ordbok som innehåller extra parametrar som skickas till rubriken
content-type. Detta tillhandahålls vanligtvis av tjänster, t.ex. Google App Engine, som fångar upp och hanterar filuppladdningar för din räkning. Som ett resultat kanske din hanterare inte tar emot det uppladdade filinnehållet, utan istället en URL eller annan pekare till filen (se RFC 2388).
- UploadedFile.charsetLink to this definition
För innehållstyperna text/*, den teckenuppsättning (t.ex.
utf8) som tillhandahålls av webbläsaren. Återigen, ”lita på men verifiera” är den bästa policyn här.
Underklasser av UploadedFile inkluderar:
- class TemporaryUploadedFileLink to this definition
En fil som laddas upp till en tillfällig plats (dvs. stream-to-disk). Den här klassen används av
TemporaryFileUploadHandler. Förutom metoderna frånUploadedFilehar den ytterligare en metod:
- TemporaryUploadedFile.temporary_file_path()Link to this definition
Returnerar den fullständiga sökvägen till den temporärt uppladdade filen.
- class InMemoryUploadedFileLink to this definition
En fil som laddas upp till minnet (dvs. stream-to-memory). Den här klassen används av
MemoryFileUploadHandler.
Inbyggda uppladdningshanterareLink to this heading
Tillsammans ger MemoryFileUploadHandler och TemporaryFileUploadHandler Djangos standardbeteende för filuppladdning genom att läsa små filer i minnet och stora filer på disken. De finns i django.core.files.uploadhandler.
- class MemoryFileUploadHandlerLink to this definition
Filuppladdningshanterare för att strömma uppladdningar till minnet (används för små filer).
- class TemporaryFileUploadHandlerLink to this definition
Uppladdningshanterare som strömmar data till en temporär fil med TemporaryUploadedFile.
Skriva anpassade uppladdningshanterareLink to this heading
- class FileUploadHandlerLink to this definition
Alla filuppladdningshanterare bör vara underklasser till django.core.files.uploadhandler.FileUploadHandler. Du kan definiera uppladdningshanterare var du vill.
Erforderliga metoderLink to this heading
Anpassade filuppladdningshanterare måste definiera följande metoder:
- FileUploadHandler.receive_data_chunk(raw_data, start)Link to this definition
Tar emot en ”bit” data från filuppladdningen.
raw_dataär en bytestring som innehåller den uppladdade datan.startär den position i filen där den härraw_data-delen börjar.De data du returnerar kommer att matas in i de efterföljande uppladdningshanterarnas
receive_data_chunk-metoder. På så sätt kan en hanterare vara ett ”filter” för andra hanterare.Returnera
Nonefrånreceive_data_chunkför att kortsluta återstående uppladdningshanterare från att hämta denna chunk. Detta är användbart om du lagrar den uppladdade datan själv och inte vill att framtida hanterare ska lagra en kopia av datan.Om du skapar ett undantag för
StopUploadellerSkipFilekommer uppladdningen att avbrytas eller filen att hoppas över helt.
- FileUploadHandler.file_complete(file_size)Link to this definition
Anropas när uppladdningen av en fil är klar.
Hanteraren bör returnera ett
UploadedFile-objekt som kommer att lagras irequest.FILES. Hanterare kan också returneraNoneför att ange attUploadedFile-objektet ska komma från efterföljande uppladdningshanterare.
Valfria metoderLink to this heading
Anpassade uppladdningshanterare kan också definiera någon av följande valfria metoder eller attribut:
- FileUploadHandler.chunk_sizeLink to this definition
Storlek, i byte, på de ”chunks” som Django ska lagra i minnet och mata in i hanteraren. Det vill säga, detta attribut styr storleken på de chunks som matas in i
FileUploadHandler.receive_data_chunk.För maximal prestanda bör chunkstorlekarna vara delbara med
4och bör inte överstiga 2 GB (231 bytes) i storlek. När det finns flera chunkstorlekar som tillhandahålls av flera hanterare, kommer Django att använda den minsta chunkstorleken som definieras av någon hanterare.Standardvärdet är 64*210 bytes, eller 64 KB.
- FileUploadHandler.new_file(field_name, file_name, content_type, content_length, charset, content_type_extra)Link to this definition
Callback som signalerar att en ny filuppladdning startar. Detta anropas innan några data har matats till några uppladdningshanterare.
field_nameär ett strängnamn på filens<input>fält.file_nameär filnamnet som tillhandahålls av webbläsaren.content_typeär den MIME-typ som tillhandahålls av webbläsaren - t.ex.'image/jpeg'.content_lengthär längden på bilden som anges av webbläsaren. Ibland kommer detta inte att tillhandahållas och kommer att varaNone.charsetär den teckenuppsättning (t.ex.utf8) som anges av webbläsaren. Liksomcontent_lengthkommer detta ibland inte att tillhandahållas.content_type_extraär extra information om filen från rubrikencontent-type. SeUploadedFile.content_type_extra <django.core.files.uploadedfile.UploadedFile.content_type_extra>`.Denna metod kan ge upphov till ett
StopFutureHandlersundantag för att förhindra att framtida handläggare hanterar denna fil.
- FileUploadHandler.upload_complete()Link to this definition
Återkallelse som signalerar att hela uppladdningen (alla filer) har slutförts.
- FileUploadHandler.upload_interrupted()Link to this definition
Återkallelse som signalerar att uppladdningen avbröts, t.ex. när användaren stängde sin webbläsare under filuppladdningen.
- FileUploadHandler.handle_raw_input(input_data, META, content_length, boundary, encoding)Link to this definition
Gör det möjligt för hanteraren att helt åsidosätta parsningen av den råa HTTP-ingången.
input_dataär ett filliknande objekt som stöderread()-ing.METAär samma objekt somrequest.META.content_lengthär längden på data iinput_data. Läs inte mer äncontent_lengthbytes fråninput_data.boundaryär MIME-gränsen för denna begäran.encodingär kodningen av begäran.Returnera
Noneom du vill att uppladdningshanteringen ska fortsätta, eller en tupel av(POST, FILES)om du vill returnera de nya datastrukturerna som passar för begäran direkt.