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?

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.