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

Aprèn a pujar fitxers a Amazon S3 usant Node.js, Express i AWS SDK v3. Tutorial pas a pas amb exemples de codi. Crea una API escalable.

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

Guía paso a paso para crear una API de carga de archivos con Node.js y S3

En l'ecosistema digital actual, la gestió de fitxers és un component crític de quasi qualsevol aplicació web moderna. Ja sigui per pujar imatges de perfil, documents PDF, factures o fitxers multimèdia, necessitem una solució que sigui escalable, segura i eficient. Emmagatzemar aquests fitxers directament al servidor de l'aplicació pot generar colls d'ampolla, costos impredictibles i riscos de pèrdua de dades. Aquí és on entra Amazon S3 (Simple Storage Service), un servei d'emmagatzematge d'objectes ofert per AWS que proporciona una durabilitat del 99.999999999% i una escalabilitat pràcticament il·limitada.

En aquest article et mostrarem com construir una API REST senzilla però robusta per pujar fitxers directament a un bucket d'Amazon S3 utilitzant Node.js, Express, Multer i AWS SDK v3. A més, explorarem bones pràctiques de seguretat, integració amb serveis cloud i com empreses com Q2BSTUDIO implementen solucions d'aquest tipus en projectes d'aplicacions a mida per als seus clients.

Aquest tutorial està pensat tant per a desenvolupadors que s'inicien a AWS com per a aquells que busquen optimitzar els seus processos de pujada de fitxers. Al llarg del text farem referències a conceptes com la ciberseguretat, la intel·ligència artificial (IA), els agents IA i la Business Intelligence (BI) amb Power BI, tots ells serveis que a Q2BSTUDIO integrem de forma natural en els nostres desenvolupaments.

Abans de començar, assegura't de tenir Node.js 18 o superior, un compte d'AWS actiu, un bucket de S3 creat i un usuari IAM amb accés programàtic (Access Key ID i Secret Access Key). Si encara no tens experiència amb AWS, no et preocupis: et guiarem pas a pas.

Pas 1: Creació del projecte

Obre la teva terminal i executa les ordres següents per crear un projecte nou i instal·lar les dependències necessàries:

mkdir s3-upload-apicd s3-upload-apinpm init -ynpm install express multer dotenv uuid @aws-sdk/client-s3

Els paquets instal·lats són: Express com a framework web, Multer per gestionar la càrrega de fitxers (en memòria), dotenv per a variables d'entorn, uuid per generar noms únics i el SDK v3 d'AWS per interactuar amb S3.

Pas 2: Variables d'entorn

Crearem un fitxer .env amb la configuració del nostre compte AWS i el bucket. Recorda substituir els valors amb les teves pròpies credencials. És fonamental no pujar aquest fitxer a repositoris públics; per això crearem també un .gitignore que exclogui node_modules i .env.

AWS_REGION=us-east-1AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXEMPLEAWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXEMPLEAWS_BUCKET_NAME=el-meu-bucket-uploadsPORT=3000

A Q2BSTUDIO sempre recomanem gestionar les credencials de manera segura, utilitzant serveis com AWS Secrets Manager o Azure Key Vault quan es passa a producció. Això forma part de les nostres pràctiques de ciberseguretat.

Pas 3: Configurar el client S3

Al fitxer principal de l'aplicació (per exemple index.js), importem el mòdul S3Client i l'inicialitzem amb les credencials:

import { S3Client } from '@aws-sdk/client-s3';const s3 = new S3Client({ region: process.env.AWS_REGION, credentials: { accessKeyId: process.env.AWS_ACCESS_KEY_ID, secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, },});

Aquesta configuració és vàlida tant per a buckets a AWS com per a entorns multicloud (Azure/AWS) que gestionem a Q2BSTUDIO, on aprofitem les fortaleses de cada plataforma.

Pas 4: Configurar Multer amb emmagatzematge en memòria

Multer és un middleware de Node.js per gestionar la pujada de fitxers. Utilitzarem memoryStorage() perquè el fitxer es carregui en un buffer i el puguem enviar directament a S3 sense emmagatzemar-lo temporalment al disc del servidor:

import multer from 'multer';const upload = multer({ storage: multer.memoryStorage() });

Aquest enfocament és ideal per a API escalables, ja que evita escriptures locals i redueix la latència. A més, és compatible amb arquitectures serverless com AWS Lambda o Azure Functions, serveis que oferim com a part de les nostres solucions cloud.

Pas 5: Crear l'endpoint de pujada

Ara definirem una ruta POST que rebi un fitxer, generi un nom únic amb UUID i el pugi al bucket utilitzant l'ordre PutObject:

import { PutObjectCommand } from '@aws-sdk/client-s3';import { v4 as uuid } from 'uuid';

app.post('/upload', upload.single('file'), async (req, res) => { try { const filename = `${uuid()}-${req.file.originalname}`; await s3.send(new PutObjectCommand({ Bucket: process.env.AWS_BUCKET_NAME, Key: filename, Body: req.file.buffer, ContentType: req.file.mimetype, })); res.json({ success: true, filename }); } catch (error) { console.error(error); res.status(500).json({ success: false, message: 'Upload failed' }); }});

Aquest codi gestiona errors bàsics, però en un entorn de producció hauríem d'afegir validacions de tipus de fitxer, mida màxima i autenticació. A Q2BSTUDIO, quan desenvolupem aplicacions a mida, incloem capes de seguretat addicionals com autenticació JWT i polítiques d'accés basades en rols.

Pas 6: Iniciar el servidor

Afegeix el codi següent per engegar Express al port configurat:

const express = require('express');const app = express();const PORT = process.env.PORT || 3000;app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

Executa npm start i la teva API estarà llesta a https://localhost:3000.

Pas 7: Provar amb Postman

Obre Postman i introdueix una sol·licitud POST a https://localhost:3000/upload. A Body, selecciona form-data, afegeix una clau anomenada file de tipus File i tria qualsevol imatge o document. En enviar, obtindràs una resposta com:

{ 'success': true, 'filename': '4c6ddcf2-profile.png' }

Verifica a la teva consola d'AWS S3 que el fitxer apareix al bucket.

Errors comuns i solucions

Durant el desenvolupament poden aparèixer errors com AccessDenied: significa que el teu usuari IAM no té permís per pujar objectes. Assegura't d'adjuntar una política que inclogui s3:PutObject. Un altre error típic és NoSuchBucket: revisa el nom del bucket i la regió. I si veus InvalidAccessKeyId, verifica les teves credencials. Aquestes pràctiques de gestió d'identitat són part de la ciberseguretat que implementem a Q2BSTUDIO per protegir les dades dels nostres clients.

Millores i propers passos

Un cop la pujada bàsica funciona, pots ampliar l'API amb funcionalitats addicionals:

Pujada múltiple de fitxers

Modifica Multer per acceptar diversos fitxers amb upload.array('files', maxCount) i processa cada un en un bucle.

URLs prefirmades (Pre-signed URLs)

Genera URL temporals perquè els usuaris puguin pujar fitxers directament des del frontend sense exposar les teves credencials. Això és útil en aplicacions amb React o Angular, i ho combinem amb serveis d'IA per classificar automàticament els documents pujats.

Validació de tipus i mida

Implementa un middleware personalitzat que rebutgi fitxers amb extensions perilloses o que excedeixin un límit (per exemple, 10 MB). Això és essencial per a la ciberseguretat i per evitar sobrecostos a S3.

Integració amb frontend

Connecta aquesta API a una aplicació React usant fetch o Axios. A Q2BSTUDIO desenvolupem aplicacions a mida amb stacks moderns com React, Vue o Angular, sempre sincronitzats amb el backend.

Ús de CloudFront per a distribució global

Per accelerar el lliurament de fitxers estàtics, pots col·locar CloudFront davant del teu bucket S3. Això redueix la latència i millora l'experiència de l'usuari, especialment si la teva audiència està distribuïda geogràficament.

Organització en carpetes

Pots estructurar els objectes a S3 utilitzant prefixos (per exemple, usuaris/{id}/imatges/) per facilitar la gestió i les polítiques de cicle de vida.

Casos d'ús empresarial i el valor de Q2BSTUDIO

A Q2BSTUDIO hem ajudat nombroses empreses a implementar sistemes de gestió documental basats en S3, combinats amb Business Intelligence amb Power BI per analitzar patrons d'ús, i amb agents IA que processen automàticament els fitxers pujats (extracció de dades, classificació, etc.). Per exemple, una asseguradora pot pujar parts d'accidents, i un agent IA extreu la informació clau i l'envia a un dashboard de Power BI per a la seva anàlisi.

El nostre equip d'experts en cloud (AWS i Azure) dissenya arquitectures escalables i segures, adaptades a les necessitats específiques de cada projecte. Ja sigui que necessitis una API simple de pujada de fitxers o un sistema complex de processament amb intel·ligència artificial, a Q2BSTUDIO oferim serveis de desenvolupament de programari a mida que integren aquestes tecnologies de manera natural.

Conclusió

Construir una API de pujada de fitxers amb Node.js i Amazon S3 és un procés directe un cop comprens el flux bàsic: el client envia el fitxer, Multer el captura en memòria, i el SDK d'AWS el transfereix al bucket. Aquest enfocament és escalable, segur i et prepara per integrar funcionalitats avançades com pre-signed URLs, validacions i automatitzacions amb IA.

La clau està a no limitar-se a la pujada simple: pensa com la teva aplicació gestionarà els fitxers després de pujar-los. La intel·ligència artificial i l'automatització poden transformar un simple repositori en un motor de negoci. A Q2BSTUDIO estem llestos per ajudar-te a fer aquest salt. Parlem del teu proper projecte?

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.