2010-06-24 1525 views
31

如何從Django的request.FILES中獲取文件名?如何從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) 

我試圖用這個,但它沒有工作:

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

回答

59
request.FILES['filename'].name 

request文檔。

如果你不知道鍵,您可以遍歷文件:

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

它給了我:期望一個縮進塊。我混淆:( – Pol 2010-06-24 16:39:43

+0

好的!我怎樣才能檢查變量名?但是我需要打印它如何打印裏面的內容? – Pol 2010-06-24 17:05:47

+2

這是我工作的:request.FILES ['file']。name – 2015-05-13 19:58:44

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

如何獲得路徑? – 2017-11-20 13:06:44

3

答案可能是過時的,因爲有一個name財產上UploadedFile類。參見:Uploaded Files and Upload Handlers (Django docs)。所以,如果你有一個FileField正確綁定的形式,訪問應該是一樣容易:

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

注意,如果你正在使用Python 3.X:

request.FILES就像對象多值字典通過上傳文件按鈕保持文件上傳。在你的HTML代碼中,按鈕的名稱(type =「file」)是「myfile」,所以「myfile」將成爲本詞典的關鍵。如果你上傳了一個文件,那麼這個鍵的值將只有一個,如果你上傳了多個文件,那麼你將擁有該特定鍵的多個值。如果您使用request.FILES['myfile'],您將獲得第一個或最後一個值(我無法確定)。這是好的,如果你只上傳一個文件,但如果你想獲得的所有文件,你應該這樣做:

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) 

當然可以擠在同一行整個事情,但是這是很容易理解