Как мне обработать загрузку файла с помощью запроса PUT в Django?

Я реализую интерфейс в стиле REST и хотел бы иметь возможность создавать (посредством загрузки) файлы через HTTP-запрос PUT. Я хотел бы создать либо TemporaryUploadedFile , либо InMemoryUploadedFile , который я затем могу передать в мои существующие FileField и .save () на объект, который является частью модели, тем самым сохраняя файл.

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

18
задан 20 April 2011 в 15:22
поделиться