Я реализую интерфейс стиля 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() (или, альтернативно, другого лучшего метода доступа). Любые идеи?