Taller - Multer, AWS y Express
Descripción
Este proyecto es un ejemplo de como manejar archivos con Node.js. Se utiliza el módulo multer para manejar archivos en Node.js.
Conceptos básicos
-
Subida de archivos: Es el proceso de enviar un archivo desde un cliente a un servidor. La subida de archivos se utiliza para enviar archivos binarios, como imágenes, vídeos, documentos, etc., a través de HTTP y tiene un estandar marcado en el tipo de contenido
multipart/form-datay posee también un boundary que separa las partes del mensaje multipart. -
Formulario multipart/form-data: Es un formulario HTML que permite el envío de archivos. Este tipo de formulario se utiliza para enviar archivos binarios a través de HTTP.
-
Boundary: Es una cadena de caracteres que se utiliza para separar las partes de un mensaje multipart. Cada parte del mensaje comienza con el boundary y termina con el boundary seguido de dos guiones (—).
-
Cuando se envia un archivo a traves de un cliente, el body y el boundary se crearan automaticamente, por lo que no es necesario crearlos manualmente. Es decir que no deberemos poner manualmente los
content-dispositionycontent-typeen el body del mensaje. -
Content-Disposition: Es un encabezado HTTP que se utiliza para especificar la forma en que se debe presentar un archivo adjunto en un mensaje multipart. El valor del encabezado Content-Disposition es una cadena de caracteres que contiene el tipo de contenido y el nombre del archivo adjunto. Por ejemplo
Content-Disposition: form-data; name="file"; filename="file.txt". -
Content-Type: Es un encabezado HTTP que se utiliza para especificar el tipo de contenido de un mensaje HTTP. El valor del encabezado Content-Type es una cadena de caracteres que contiene el tipo de contenido y la codificación de caracteres del mensaje. Por ejemplo
text/plainpara archivos de texto,image/jpegpara imágenes,application/pdfpara documentos PDF, etc. -
Finalmente solo deberemos recibir el archivo en el servidor y guardarlo en el sistema de archivos.
-
Content-Length: Es un encabezado HTTP que se utiliza para especificar la longitud del contenido de un mensaje HTTP. El valor del encabezado Content-Length es un número entero que indica la longitud del contenido en bytes.
-
Multer: Es un middleware de Node.js para manejar archivos en formularios multipart/form-data. Multer no procesa ningún campo que no sea un archivo en el formulario. Multer añade un objeto file (o varios) al objeto request. Este objeto file contiene información sobre el archivo cargado.
Ejemplo
POST /files HTTP/1.1Host: localhost:3000Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="file"; filename="file.txt"Content-Type: text/plain
(data)------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="name"
(name)------WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition: form-data; name="description"
(description)------WebKitFormBoundary7MA4YWxkTrZu0gW--Conceptos de AWS S3
-
S3: Simple Storage Service, es un servicio de almacenamiento de objetos, lo que significa que almacena datos en forma de objetos, que consisten en un archivo y los metadatos asociados con él.
-
Bucket: Es un contenedor de objetos que se almacenan en S3. Cuando creamos un bucket, debemos asignarle un nombre único en todo S3.
-
Objeto: Es un archivo y los metadatos asociados con él. Cada objeto se almacena en un bucket y tiene una clave (key) única que lo identifica dentro del bucket.
-
IAM: Identity and Access Management, es un servicio de AWS que nos permite administrar el acceso a los recursos de AWS de forma segura. Con IAM, podemos crear y administrar usuarios, grupos y roles, y asignarles permisos para acceder a los recursos de AWS.
-
Usuario IAM: Es una identidad que tiene permisos para acceder a los recursos de AWS.
-
Política IAM: Es un documento JSON que define los permisos de un usuario, grupo o rol en AWS. Una política IAM especifica qué acciones se pueden realizar en qué recursos y bajo qué condiciones.