2011-08-25 19 views
9

Estoy creando una API REST para un sitio web de Django. Estoy usando tastypie para hacerlo. Mi problema es que no puedo diseñar cómo publicar imágenes o archivos a través de esta API. Quiero decir, para crear un objeto en la base de datos estamos publicando datos en formato json. ¿Pero cómo puedo poner un archivo dentro de ese json?Publicación de archivos a través de api RESTful con django y tastypie

Encontré que hay dos métodos, uno de ellos es convertirlos en formato Base64. No quiero usarlo porque en mis pruebas, la imagen que es de 74kb está siendo de 110kb-120kb cuando se convierte a Base64.

Entonces, ¿alguien me puede explicar cómo puedo publicar un objeto que contiene archivos dentro de él?

+0

Mi tenedor incluye parches que permiten la carga de archivos a través de formularios de varios https://github.com/nisc/django-tastypie – nisc

Respuesta

1

Serializar el archivo en la solicitud JSON es una forma ligeramente incómoda de hacer las cosas, y también va a significar que perderá parte de la carga automática de archivo de Django, por ejemplo, escribir el archivo en la memoria cuando ingrese la solicitud y solo cambiando a escribirlo en el disco una vez que supera un determinado tamaño.

Para la vista de carga de archivos, es posible que desee dejar de leer y escribir la opinión explícitamente.

Posteriormente, se podría utilizar un impreso de varias copias estándar, (y sólo el acceso al archivo usando request.FILES como de costumbre, o (más complicado), create a view that will accept the raw file content

+3

En sabroso vi un campo de recursos llamado ImageField. Puede ser que maneje cargas de archivos, pero no tengo idea de cómo enviar archivos dentro de mi JSON. –

5

Mira aquí:. https://github.com/toastdriven/django-tastypie/issues/42

Parece que hubo enfoques tODO eso, pero no están funcionando bastante bien.

Después de un largo tiempo jugando con diversas soluciones (https://github.com/klipstein/django-tastypie/commit/e0f86ddffeb46c77704328a3b5899ec08e18e4eb, https://github.com/klipstein/django-tastypie/commits/form-data) haciendo fichero de su gestión en tastypie llegué a la conclusión de que esto no se puede resolver elegantemente si desea admitir cargas de archivos desde cada navegador.

echar un vistazo a este tenedor

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

+0

No puedo entender cuál es el estado actual. ¿De qué manera deberíamos enviar archivos a tastypie? – Alper

Cuestiones relacionadas