Как я могу получить имя файла из request.FILES? - PullRequest
44 голосов
/ 24 июня 2010

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

Ответы [ 4 ]

83 голосов
/ 24 июня 2010
request.FILES['filename'].name

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

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

for filename, file in request.FILES.iteritems():
    name = request.FILES[filename].name
53 голосов
/ 08 сентября 2012
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
8 голосов
/ 28 сентября 2017

ПРИМЕЧАНИЕ, если вы используете 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 голосов
/ 19 ноября 2014

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

if form.is_valid():
    form.cleaned_data['my_file'].name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...