Cómo cargar un archivo a Amazon S3 usando el nodo y obtener la ruta del archivo

Es más eficiente permitir que el cliente (el navegador o la aplicación móvil) cargue directamente a un bucket de S3 sin pasar por el código del servidor principal. Una forma de hacerlo:

  • Crea un cubo S3 para cargas. Restrinja el acceso a un rol específico de IAM.
  • En el código del servidor, cree una URL firmada para HTTP PUT utilizando las credenciales de IAM. El SDK de AWS S3 Node.js proporciona esta API.
  • Proporcione esta URL firmada al cliente cuando el cliente solicite cargar en una llamada API.
  • Deje que el cliente realice el PUT HTTP a la URL firmada. Durante esta carga, el cliente asume temporalmente el rol de IAM y puede escribir en el depósito.
  • Configure un AWS Lambda para escuchar eventos S3 en el bucket. Cuando finalice la carga del archivo, envíe un mensaje al código del servidor principal con la ruta.
  • El servidor principal puede almacenar la ruta del archivo en MongoDB, o cualquier mecanismo que desee.
  • Alternativamente, el Lambda podría hacerle la tienda a MongoDB.

Amazon S3 podría ser una solución a su problema. Pero aún necesita una forma de almacenar y obtener las imágenes. Hasta ahora se me ocurrió dos soluciones (y usé una de ellas):

  • Use Imgur, tienen una buena API y es un módulo en la mayoría de los idiomas. Aquí hay un tutorial para el nodo js: imgur-node-api. Dato curioso: Snapchat usa Imgur (a partir de mi conocimiento) por eso todos dicen que las imágenes de Snapchat nunca desaparecen.
  • Use una base de datos, Amazon tiene servicios de bases de datos, pero también lo hacen muchos otros lugares en Internet. Por supuesto, si creara una aplicación como Instagram, estaría utilizando su propio servidor con su propia base de datos. Simplemente busque “alojamiento de bases de datos” en Google si desea probar esta ruta.

Aquí hay un ejemplo de nodo para Heroku: carga directa de archivos S3 en Node.js. Simplemente lea los documentos del S3 para implementarlo.