[Django] Как я могу получить имя файла из request.FILES?



Answers

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
Question

Как я могу получить имя файла из request.FILES в Django?

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']



ПРИМЕЧАНИЕ, если вы используете python 3.x:

request.FILES - это многозначный словарь, такой как объект, который сохраняет файлы, загруженные с помощью кнопки загружаемого файла. Скажем, в вашем html-коде имя кнопки (tyep = «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)

конечно, можно сжать все в одной строке, но это легко понять




Links