Subida directa de archivos
Enviar datos de archivo JSON y la imagen en una solicitud no siempre es algo que debe suceder. Puede dividirlo en dos solicitudes, o simplemente puede tener una solicitud si solo necesita inferir un poco de datos de la solicitud.
Por ejemplo, la carga directa de imágenes funciona para cargar avatares para un usuario:
El usuario se detecta marcando oauth2-access-token. Entre conocer al usuario y recibir el Tipo de contenido para informarnos si se trata de un archivo JPEG, GIF o PNG, significa que realmente tenemos todos los datos conectados que necesitamos para este caso de uso, y la imagen en sí misma se encuentra en el HTTP cuerpo como datos en bruto. Http arty en Ruby tomará, por ejemplo, una instancia de File como carga útil, o puede enviar la cadena en PHP haciendo file_get_contents (‘/ path / to / file’) y enviarla.
A partir de ahí, es trivialmente fácil obtener que el cuerpo tenga una cadena de la imagen:
Con esta cadena, puede cargarla fácilmente en S3 o colocarla en cualquier otro lugar que desee, especialmente si está usando algo excelente como Flysystem.
Lo único que vale la pena mencionar en esa solicitud es la adición de Content-Length, que es básicamente el tamaño de la imagen que se está cargando. Una comprobación rápida de los encabezados [‘Content-Length’]. To_i> 3.megabytes nos permitirá responder rápidamente diciendo “Esta imagen es demasiado grande”, que es mejor que esperar para siempre para decir eso. Claro, la gente maliciosa podría estar aquí, por lo que su código de back-end también deberá verificar el tamaño de la imagen. Nunca confíes en las aportaciones.
Content-Length también te permite saber si tienes la imagen completa o no. Si hay un problema y solo se carga parte de la imagen, el tamaño de la imagen que reciba no será el mismo que la longitud del contenido. Revísalos, mira cómo va.
La respuesta aquí tendrá un cuerpo simple:
Ese user
se infirió del token, y image_url
es la URL resultante del avatar que se ha subido. Normalmente, esto sería una URL de CDN, por supuesto, porque no quiere que su API sea responsable de manejar las descargas de activos también.
Subir desde URL
Cargar imágenes directamente en el cuerpo HTTP fue algo que funcionó bien para los equipos móviles en Ride, pero el equipo web no se divirtió tanto con él. Probablemente se deba a los requisitos comerciales que tenemos. Básicamente, los equipos móviles estaban cargando imágenes de avatar de usuario directamente desde las bibliotecas de fotos en el dispositivo, y los equipos web estaban sacando avatares de Facebook o Twitter.
Incluso si estuviéramos haciendo las cosas de manera un poco diferente, no hay forma de que el equipo web acceda al contenido sin formato de una imagen completa utilizando solo JavaScript basado en navegador. Probablemente podrían volverse locos para obtenerlo, pero parecía más fácil simplemente proporcionar otra opción. El mismo punto final con la misma lógica detrás de todo, pero agrega soporte para una carga JSON:
Eso fue literalmente todo lo que necesitábamos apoyar externamente para que todo funcionara. Luego, internamente, verifiqué el tipo de contenido y llamé a un método read_from_string
o read_from_url
, que hacen exactamente lo que dice en la lata.
Entonces, por supuesto, la respuesta será idéntica al Método:
Es posible que apoyar a ambos no sea algo que deba hacer, y puede comenzar solo necesitando uno. Definitivamente, no escriba la funcionalidad de API que no necesita y no usará, pero tenga en cuenta que en algún momento alguien querrá que se agregue el otro enfoque. HTTP hace que sea increíblemente fácil de hacer gracias a poder cambiar Content-Type
.
Para obtener los mejores servicios de desarrollo de PHP, visite amablemente Elsner Technologies.
Gracias por leer
Saludos,
James