2010-06-24 17 views
31

Jak mogę uzyskać nazwę pliku z żądania.FILES w Django?Jak mogę uzyskać nazwę pliku z żądania.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) 

Próbowałem za to, ale to nie działa:

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

Odpowiedz

59
request.FILES['filename'].name 

Z dokumentacji request.

Jeśli nie znasz klucza, można iteracyjne nad pliki:

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

to daje mi: oczekiwano wcięcia bloku. I mylić :( – Pol

+0

ok! Jak mogę sprawdzić nazwę zmiennej?, Ale muszę wydrukować to, jak mogę wydrukować to, co jest w środku? – Pol

+2

Oto, co działało dla mnie: 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

jak mogę uzyskać ścieżkę? –

3

Odpowiedź może być nieaktualna, ponieważ istnieje name nieruchomość od klasy UploadedFile. Patrz: Uploaded Files and Upload Handlers (Django docs). Tak więc, jeśli wiążą swoją formę z FileField poprawnie, dostęp powinien być tak proste, jak:

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

UWAGA jeśli używasz Pythona 3.x:

request.FILES jest wielowartościowym słownika jak przedmiot dzięki któremu pliki są przesyłane za pomocą przycisku przesyłania pliku. Powiedz w swoim kodzie HTML nazwa przycisku (type = "file") to "myfile", więc "mójplik" będzie kluczem w tym słowniku. Jeśli przesłałeś jeden plik, wartość tego klucza będzie tylko jedna i jeśli załadujesz wiele plików, będziesz miał wiele wartości dla tego konkretnego klucza. Jeśli użyjesz request.FILES['myfile'], otrzymasz pierwszą lub ostatnią wartość (nie mogę powiedzieć na pewno). To jest w porządku, jeśli tylko przesłanych jeden plik, ale jeśli chcesz, aby wszystkie pliki należy to zrobić:

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) 

oczywiście można wycisnąć całą rzecz w jednej linii, ale to jest łatwe do zrozumienia

Powiązane problemy