Cómo cargar un archivo usando la API Codeigniter Rest

La carga de archivos es un proceso esencial en muchas aplicaciones web. Casi todos los sitios web y aplicaciones web requieren un componente integrado de carga de archivos. La carga de archivos e imágenes en la aplicación CodeIgniter es un componente simple que se encarga del proceso de carga con pequeños problemas.

Crear el controlador

El siguiente paso es la creación de un archivo en la carpeta del controlador. Denomine el archivo upload_controller.php . En este archivo, cargaré una biblioteca para inicializar la clase Upload a través del siguiente código:

$ this-> load-> library (‘subir’);

Establecer preferencias de carga de archivos

También estableceré las preferencias para el proceso de carga de archivos a través de la función del controlador do_upload (). Esta función contendrá el siguiente código:

$ config [‘upload_path’] = ‘./uploads/’;

$ config [‘allowed_types’] = ‘gif | jpg | png’;

$ config [‘max_size’] = ‘100’;

$ config [‘max_width’] = ‘1024’;

$ config [‘max_height’] = ‘768’;

Cómo cargar imágenes y archivos en CodeIgniter

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