Получение фактического файла из запроса http (для os.stat) - PullRequest
2 голосов
/ 04 мая 2020

Я бы хотел получить метаданные загруженного файла, используя:

st = os.stat(file_path)

Однако я не уверен, как проанализировать атрибут file_path из запроса http. Например, я использовал:

request.FILES

, но затем получил:

TypeError: stat: path should be string, bytes, os.PathLike or integer, not MultiValueDict

Я также сериализовал запрос, например так:

serializer = FileSerializer(data=request.data)

Как сделать Я получаю фактический загруженный файл в запросе http?

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Хотя сомнительно, что в общем случае до того, как файл __ будет сохранен (это не применимо к облачному хранилищу и т. Д. c), это правильная вещь, ответ:

Когда загруженный файл временно хранится Django либо в памяти (если мала), либо на диске с обработчиками загрузки .

Все UploadedFiles будет иметь такие атрибуты, как размер , имя .

Если TemporaryFileUploadHandler был использован для хранения файла - этот файл в request.FILES будет быть TemporaryUploadedFile и будет иметь temporary_file_path() метод:

for f in request.FILES.getlist("file_field"):
    try:
        fstats = os.stat(f.temporary_file_path())
    except AttributeError:
        # do something
    # file processing logic
0 голосов
/ 13 мая 2020

Чтобы извлечь фактический файл из запроса http, вы можете использовать это:

if request.method == 'POST':
        uploaded_file = request.FILES['XYZ']
        fs = FileSystemStorage()
        server_file_name = fs.save(uploaded_file.name, uploaded_file)

, где XYZ - это значение атрибута имени во входном теге. Как это:

<input type="file" name="XYZ" aria-label="Upload File" id="_upload_file">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...