Я реализую интерфейс стиля REST и хотел бы иметь возможность создавать (через загрузку) файлы через запрос HTTP PUT. Я хотел бы создать либо TemporaryUploadedFile
, либо InMemoryUploadedFile
, который затем могу передать существующим FileField
и .save()
на объект, который является частью модели, тем самым сохраняя файл.
Я не совсем уверен, как обращаться с частью загрузки файла. В частности, это запрос put, у меня нет доступа к request.FILES
, поскольку он не существует в запросе PUT
.
Итак, некоторые вопросы:
- Можно ли использовать существующие функции в классе
HttpRequest
, в частности, часть, которая обрабатывает загрузку файлов? Я знаю, что прямойPUT
не является многопрофильным MIME-запросом, поэтому я так не думаю, но его стоит спросить. - Как я могу вывести тип mime того, что отправляется? Если у меня все получится, тело PUT будет просто файлом без прелюдии. Поэтому я требую, чтобы пользователь указывал тип mime в своих заголовках?
- Как это расширить до больших объемов данных? Я не хочу читать все это в память, так как это очень неэффективно. В идеале я бы сделал то, что
TemporaryUploadFile
и связанный с ним код - запишите его часть за раз?
Я просмотрел этот пример кода, который обманывает Django в обработке PUT
в качестве запроса POST
. Если у меня все получится, это будет обрабатывать только кодированные данные. Это REST, поэтому лучшим решением было бы не предполагать, что форма закодированные данные будут существовать. Тем не менее, я рад услышать соответствующие рекомендации по использованию mime (не multipart) каким-то образом (но загрузка должна содержать только один файл).
Django 1.3 является приемлемым. Поэтому я могу либо что-то сделать с помощью request.raw_post_data
или request.read()
(или, альтернативно, другого лучшего метода доступа). Любые идеи?