2010-06-24 1524 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) 

当然可以挤在同一行整个事情,但是这是很容易理解