2012-06-12 16 views
7

Estoy construyendo una API de manipulación de archivos en Rails, y necesito poder acceder a ella a través de una gema separada. La API usa Carrierwave, y esa pieza funciona sin problemas. Lo que no entiendo cómo hacer es tomar un archivo arbitrario y entregarlo a la API desde la interfaz gema.¿Cómo cargo un archivo a través de Carrierwave sobre una API JSON?

Carrierwave toma sus archivos como los resultados de File.open('foo.jpg') o como una POST desde un campo de archivo. Sin embargo, no estoy seguro de lo que hacen los dos para serializar el archivo y enviarlo.

¿Cómo tomo el contenido de un archivo y lo convierto en algo que puedo pasar y publicar a través de JSON?

+0

¿Se refiere a la API recibe cosas como JSON en lugar de parámetros del formulario? –

+0

Eso es correcto. La API recibirá elementos en JSON, ya que está diseñado para admitir una interfaz de línea de comandos en lugar de una interfaz basada en navegador. –

Respuesta

4

Cuando un formulario HTML envía un archivo POST, lo que sucede en realidad es una parte especial de HTTP llamada solicitud multiparte. Efectivamente, el archivo se "adjunta" a la solicitud.

La pregunta será respondida por qué biblioteca está utilizando para ENVIAR el JSON a su API. Adjuntar un archivo a una solicitud debería ser bastante común, pero no todas las bibliotecas pueden admitirlo.

This stack overflow article seems to give some good indications of how to do it.

+0

Esta es una gran manera de lograr las cosas que estaba tratando de lograr. Parece que la pregunta original comienza con una mala premisa: un archivo no se serializaría en un objeto JSON en absoluto, sino que se ubicaría en una parte completamente diferente del protocolo. En cualquier caso, esta biblioteca me lleva a un gran comienzo, y si me pregunto cómo funciona lo que hago, siempre puedo acertar con el código fuente de eso. ¡Gracias! –

+0

Exactamente. Notablemente, PUEDE incrustar un archivo en el JSON utilizando la codificación base64 o alguna otra codificación ASCII, sin embargo, no recomendaría esa ruta a menos que realmente la necesite. –

Cuestiones relacionadas