Pujar fitxers a Amazon S3 amb Node.js, Express i AWS SDK v3

Aprèn a construir una API REST amb Node.js, Express, Multer i AWS SDK v3 per pujar fitxers directament a Amazon S3. Tutorial pas a pas.

miércoles, 29 de julio de 2026 • 4 min de lectura • Equip Q2BSTUDIO

Tutorial: API REST para subir archivos a S3

La gestió de fitxers en aplicacions web modernes va molt més enllà d'un simple formulari de càrrega. Perfils d'usuari, factures electròniques, informes empresarials o continguts multimèdia requereixen solucions d'emmagatzematge escalables, segures i d'alt rendiment. Amazon S3 s'ha convertit en l'estàndard de facto per a l'emmagatzematge al núvol, i combinar-lo amb Node.js, Express i l'AWS SDK v3 permet construir API de pujada ràpides, fiables i alineades amb les millors pràctiques de desenvolupament.

En aquest article explorarem com implementar un endpoint REST que rebi fitxers des d'un client i els emmagatzemi directament en un bucket de S3, utilitzant Multer per al maneig de multipart/form-data i el client oficial d'AWS per a JavaScript. L'enfocament està pensat per a desenvolupadors que busquen integrar aquesta funcionalitat en les seves aplicacions a mida, ja sigui un portal intern, un SaaS o una plataforma de comerç electrònic.

Abans de començar, assegura't de tenir Node.js 18 o superior, un compte d'AWS actiu i un bucket S3 creat a la regió desitjada. També necessitaràs un usuari IAM amb accés programàtic i els permisos adequats (almenys s3:PutObject).

La configuració inicial d'un projecte Express és ràpida. Després d'inicialitzar el package.json amb npm init -y, instal·lem les dependències essencials: express, multer, dotenv, uuid i @aws-sdk/client-s3. La llibreria dotenv ens permet gestionar variables d'entorn com la regió AWS, les credencials i el nom del bucket sense exposar dades sensibles al codi font.

El següent pas és crear el client S3. Amb la versió 3 del SDK AWS, la instanciació és senzilla i tipada. Definim un nou objecte S3Client passant-li la regió i les credencials. Aquest client l'utilitzarem per enviar comandaments com PutObjectCommand, que és l'encarregat de pujar el fitxer al bucket.

Multer es configura amb emmagatzematge en memòria (memoryStorage), cosa que significa que el fitxer es rep com un buffer a l'objecte req.file. Aquesta és l'opció recomanada quan es vol reenviar el contingut a un servei extern com S3, evitant escriptures temporals al disc del servidor. La configuració és mínima: const upload = multer({ storage: multer.memoryStorage() }).

L'endpoint POST /upload rep un camp 'file' de tipus fitxer. Dins el manejador asíncron, generem un nom únic amb uuid per evitar col·lisions i preservar el nom original de l'usuari. Després invoquem s3.send amb el comandament PutObjectCommand, especificant bucket, key (nom del fitxer), body (el buffer) i contentType (el mimetype del fitxer).

La resposta exitosa retorna un JSON amb el nom generat i un indicador d'èxit. En cas d'error, es captura l'excepció i es respon amb un codi 500 i un missatge genèric. És important registrar l'error al servidor per facilitar la depuració, però sense exposar detalls interns al client.

Un cop el servidor està en marxa (npm start o node index.js), podem provar l'endpoint amb Postman o qualsevol client HTTP. Enviem una sol·licitud POST a https://localhost:3000/upload, seleccionem Body > form-data, afegim una clau 'file' de tipus File i escollim un document o imatge. La resposta contindrà el nom únic amb què es va emmagatzemar a S3.

Els errors comuns inclouen AccessDenied (manca de permisos s3:PutObject a la política IAM), NoSuchBucket (bucket o regió incorrectes) i InvalidAccessKeyId (credencials mal escrites o rotades). Revisa sempre la consola d'AWS IAM i la configuració del teu bucket.

Un cop la pujada bàsica funciona, les possibilitats es multipliquen. Pots afegir validació del tipus de fitxer i mida, pujar múltiples fitxers amb upload.array('files'), generar URL prefirmades perquè els usuaris pugin directament des del frontend sense passar pel teu servidor, o utilitzar CloudFront per servir els fitxers amb baixa latència. També és recomanable organitzar els fitxers en carpetes virtuals dins del bucket mitjançant prefixos a la clau (per exemple, usuarios/{id}/fotos/perfil.png).

Des d'una perspectiva empresarial, la integració de S3 amb Node.js encaixa perfectament en arquitectures de microserveis i aplicacions cloud-native. A Q2BSTUDIO, desenvolupem aplicacions a mida que aprofiten l'elasticitat del núvol AWS o Azure per gestionar volums de dades creixents sense comprometre la seguretat. La ciberseguretat és un pilar fonamental: cada bucket s'ha de configurar amb polítiques d'accés restringit, xifrat en repòs i en trànsit, i rotació periòdica de credencials.

A més, la intel·ligència artificial pot potenciar la gestió dels fitxers pujats. Per exemple, integrar agents IA que classifiquin documents automàticament, extreguin metadades o detectin contingut sensible abans d'emmagatzemar-lo. A Q2BSTUDIO també implementem solucions de Business Intelligence amb Power BI que consumeixen dades des de S3 per generar dashboards en temps real, i automatitzem processos d'ingesta i transformació amb pipelines serverless.

Si el teu projecte requereix pujar fitxers de manera eficient i escalable, aquesta combinació tecnològica és una aposta segura. No oblidis que el SDK v3 permet treballar amb tipus de dades més moderns i promeses natives, facilitant la integració amb async/await i la depuració.

Per aprofundir en la creació de programari robust i segur, t'invitem a consultar els nostres serveis de cloud AWS i Azure, on dissenyem infraestructures que suporten càrregues de treball intensives en emmagatzematge i procés. També pots explorar com la intel·ligència artificial i els agents IA estan transformant l'automatització empresarial amb solucions a mida.

En resum, pujar fitxers a Amazon S3 amb Node.js, Express i AWS SDK v3 és un procés directe que, ben implementat, aporta escalabilitat, seguretat i rendiment a qualsevol aplicació. Des de perfils d'usuari fins a documents crítics, aquesta API et permetrà externalitzar l'emmagatzematge i centrar-te en el que realment importa: la teva lògica de negoci.

UNA PAUSA?

Juga una estona abans de marxar

ELS NOSTRES SERVEIS

Com et podem ajudar

Tens un projecte en ment?

Explica'ns la teva visió i la convertim en una solució de programari. Sigui quin sigui l'abast, fem realitat la teva idea.