如何从request.FILES获取文件名?

Pol*_*Pol 45 django django-forms

如何从Django中的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)
Run Code Online (Sandbox Code Playgroud)

我尝试使用它但它不起作用:

  if 'filename'  in request.FILES:
         filename = request.FILES['filename']
Run Code Online (Sandbox Code Playgroud)

mip*_*adi 91

request.FILES['filename'].name
Run Code Online (Sandbox Code Playgroud)

request文档中.

如果您不知道密钥,则可以迭代文件:

for filename, file in request.FILES.iteritems():
    name = request.FILES[filename].name
Run Code Online (Sandbox Code Playgroud)

  • 它给了我:期望一个缩进的块.我很困惑:( (2认同)
  • 这对我有用:request.FILES ['file'].name (2认同)
  • iteritems()已在python3中删除,因此您无法再使用此方法。.items()而不是.iteritems() (2认同)

eca*_*buk 54

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
Run Code Online (Sandbox Code Playgroud)

  • 我怎么能走这条路呢? (3认同)

Ibo*_*Ibo 9

注意如果您使用的是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)
Run Code Online (Sandbox Code Playgroud)

当然,人们可以将整个事情挤在一条线上,但这很容易理解


Tom*_*šek 6

答案可能已经过时,因为类name上有一个属性UploadedFile。请参阅:上传的文件和上传处理程序(Django 文档)。因此,如果您FileField正确绑定表单,访问应该像以下一样简单:

if form.is_valid():
    form.cleaned_data['my_file'].name
Run Code Online (Sandbox Code Playgroud)


小智 5

为我工作过 Python 3.8、Django 3.2

print(request.FILES.items())
for filename, file in request.FILES.items():
    print(filename, file)
Run Code Online (Sandbox Code Playgroud)

request.FILES.iteritems()正在AttributeError为我扔东西。