2010-06-24 21 views
31

Come posso ottenere il nome del file da request.FILES in Django?Come posso ottenere il nome del file da request.FILES?

def upload(request): 
    if request.method == 'POST': 
     form = UploadForm(request.POST, request.FILES) 
     if form.is_valid(): 
      upload = Upload() 
      upload.timestamp = datetime.datetime.now() 
      save_instance(form, upload) 

Ho provato ad utilizzare questo, ma non ha funzionato:

if 'filename' in request.FILES: 
     filename = request.FILES['filename'] 

risposta

59
request.FILES['filename'].name 

Dalla documentazione request.

Se non si conosce la chiave, è possibile iterare i file:

for filename, file in request.FILES.iteritems(): 
    name = request.FILES[filename].name 
+1

mi dà: previsto un blocco rientrato. Confondo :( – Pol

+0

ok! Come posso controllare il nome della variabile? Ma ho bisogno di stamparlo come posso stampare cosa c'è dentro? – Pol

+2

Questo è ciò che ha funzionato per me: request.FILES ['file']. Name –

42
file = request.FILES['filename'] 
file.name   # Gives name 
file.content_type # Gives Content type text/html etc 
file.size   # Gives file's size in byte 
file.read()   # Reads file 
+1

come posso ottenere il percorso? –

3

La risposta può essere superata, in quanto non v'è una proprietà name sulla classe UploadedFile. Vedi: Uploaded Files and Upload Handlers (Django docs). Quindi, se si associa il modulo con un FileField correttamente, l'accesso dovrebbe essere facile come:

if form.is_valid(): 
    form.cleaned_data['my_file'].name 
3

NOTA se si utilizza python 3.x:

request.FILES è un dizionario più valori come oggetto che mantiene i file caricati tramite un pulsante di caricamento file. Dì nel tuo codice html il nome del pulsante (type = "file") è "myfile" quindi "myfile" sarà la chiave in questo dizionario. Se hai caricato un file, il valore per questa chiave sarà solo uno e se hai caricato più file, avrai più valori per quella chiave specifica. Se usi request.FILES['myfile'] otterrai il primo o l'ultimo valore (non posso dirlo con certezza). Questo va bene se hai caricato un solo file, ma se si desidera ottenere tutti i file che si dovrebbe fare questo:

list=[] #myfile is the key of a multi value dictionary, values are the uploaded files 
for f in request.FILES.getlist('myfile'): #myfile is the name of your html file button 
    filename = f.name 
    list.append(filename) 

naturalmente si può spremere il tutto in una sola riga, ma questo è facile da capire

Problemi correlati