Отправка файлов через RESTful API с Django и вкусным пирогом - PullRequest
9 голосов
/ 25 августа 2011

Я создаю RESTful API для веб-сайта Django. Я использую tastypie для этого. Моя проблема в том, что я не могу придумать, как разместить изображения или файлы через этот API. Я имею в виду, что для создания объекта в базе данных мы публикуем данные в формате json. Но как я могу поместить файл в этот JSON?

Я обнаружил, что есть два метода, один из которых конвертирует их в формат Base64. Я не хочу использовать его, потому что в моих тестах образ, который составляет 74 КБ, при преобразовании в Base64 составляет 110 КБ-120 КБ.

Так может ли кто-нибудь объяснить мне, как я могу опубликовать объект, содержащий файлы внутри него?

Ответы [ 2 ]

5 голосов
/ 23 декабря 2011

Посмотрите здесь: https://github.com/toastdriven/django-tastypie/issues/42

Похоже, что были подходы для этого, но они работают не очень хорошо.

После долгого времени, играя с различными решениями (https://github.com/klipstein/django-tastypie/commit/e0f86ddffeb46c77704328a3b5899ec08e18e4eb, https://github.com/klipstein/django-tastypie/commits/form-data) занимаясь обработкой файлов в tastypie, я пришел к выводу, что это нельзя решить элегантно, если вы хотите поддерживать загрузку файлов из каждого браузера.

Посмотрите на эту вилку

https://github.com/ff0000/django-tastypie/commit/1fbc0a

1 голос
/ 25 августа 2011

Сериализация файла в запрос JSON - это немного неуклюжий способ сделать что-то, и это также означает, что вы теряете некоторую автоматическую выгоду Django при загрузке файлов, например, запись файла в память при поступлении запроса и только переключение записать его на диск, когда он превысит определенный размер.

Для представления загрузки файлов вы можете отказаться от вкусного пирога и явно написать представление.

Тогда вы можете использовать стандартную многочастную форму (и просто получить доступ к файлу, используя request.FILES как обычно, или (более сложный), создать представление, которое будет принимать необработанное содержимое файла .

...