2010-06-24 9 views
31

Wie kann ich den Dateinamen von request.FILES in Django bekommen?Wie kann ich den Dateinamen von request.FILES bekommen?

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) 

Ich versuchte dies mit, aber es hat nicht funktioniert:

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

Antwort

59
request.FILES['filename'].name 

Von der request Dokumentation.

Wenn Sie den Schlüssel nicht kennen, können Sie über die Dateien iterieren:

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

gibt es mir: erwartet einen eingerückten Block. Ich verwirre :( – Pol

+0

ok! Wie kann ich Variablennamen überprüfen? Aber ich muss es drucken, wie kann ich drucken, was drin ist? – Pol

+2

Dies ist, was für mich arbeitete: request.FILES ['Datei']. 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

Wie kann ich den Pfad bekommen? –

3

Die Antwort kann veraltet sein, da es eine name Eigenschaft auf der UploadedFile Klasse. Siehe: Uploaded Files and Upload Handlers (Django docs). Also, wenn Sie Ihre Form mit einem FileField richtig binden, sollte der Zugang so einfach wie:

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

Hinweis Wenn Sie Python 3.x verwenden:

request.FILES ein mehrwertig Wörterbuch wie Objekt Dadurch bleiben die Dateien über eine Schaltfläche zum Hochladen von Dateien verfügbar. Sagen Sie in Ihrem HTML-Code, dass der Name der Schaltfläche (type = "file") "myfile" ist, also wird "myfile" der Schlüssel in diesem Wörterbuch sein. Wenn Sie eine Datei hochgeladen haben, ist der Wert für diesen Schlüssel nur einer. Wenn Sie mehrere Dateien hochgeladen haben, verfügen Sie über mehrere Werte für diesen bestimmten Schlüssel. Wenn Sie request.FILES['myfile'] verwenden, erhalten Sie den ersten oder letzten Wert (ich kann nicht sicher sagen). Das ist in Ordnung, wenn Sie nur eine Datei hochgeladen, aber wenn Sie alle Dateien erhalten möchten, sollten Sie dies tun:

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) 

natürlich man das Ganze in einer Zeile zusammendrücken können, aber das ist einfach zu verstehen

Verwandte Themen