Подтвердить что ты не робот

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

Как я могу получить имя файла из 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']
4b9b3361

Ответ 1

request.FILES['filename'].name

В документации request.

Если вы не знаете ключ, вы можете перебирать файлы:

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

Ответ 2

file = request.FILES['filename']
file.name           # Gives name
file.content_type   # Gives Content type text/html etc
file.size           # Gives file size in byte
file.read()         # Reads file

Ответ 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)

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

Ответ 4

Ответ может быть устаревшим, поскольку в классе UploadedFile есть свойство name. Смотрите: Загруженные файлы и обработчики загрузки (Django docs). Итак, если вы правильно привязываете форму с помощью FileField, доступ должен быть таким же простым, как:

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