Node.js Cloud Storage API

Add File Storage to Express, Fastify, or Nest in Three HTTP Calls

S3-compatible file storage for Node.js applications with global CDN delivery and easy integration.

Picking cloud storage for Node.js, a backend almost always reaches the same file-storage fork: install the AWS SDK and take on IAM users, bucket policies, a separate CDN distribution, and SDK version churn — or find something that's just HTTP. files.link is the HTTP path. Your server handles the incoming multipart upload with whatever it already uses (multer for Express, @fastify/multipart for Fastify, the built-in interceptor for Nest), then forwards the bytes to files.link with three fetch calls and stores the returned CDN URL.

The flow, concretely: call POST /v1/files/{folderId} with the filename to get back { success, urls: [{ url, id }] }; PUT the file buffer to that presigned url; then POST /v1/files/confirm-upload with { ids: [id] } to publish. The auth header is your raw API key — no Bearer prefix, no signing algorithm, no STS dance. In Express that looks like: const r = await fetch(\https://api.files.link/v1/files/${folderId}\, { method: 'POST', headers: { Authorization: apiKey, 'Content-Type': 'application/json' }, body: JSON.stringify({ files: [{ name: req.file.originalname }] }) }); const { urls } = await r.json(); await fetch(urls[0].url, { method: 'PUT', body: req.file.buffer }); await fetch('https://api.files.link/v1/files/confirm-upload', { method: 'POST', headers: { Authorization: apiKey, 'Content-Type': 'application/json' }, body: JSON.stringify({ ids: [urls[0].id] }) }); then save urls[0] against your record.

The same three calls work unchanged in Fastify, Nest, a Bull/BullMQ worker, or a Lambda — there's no SDK to initialize and no connection pool to keep warm, which is exactly what you want in a stateless serverless function where cold-start SDK init and credential resolution cost real milliseconds. Compared to aws-sdk you drop a dependency tree and the entire IAM surface; compared to Vercel Blob you aren't tied to one host's platform; compared to writing uploads to local disk (which evaporates on container restart and doesn't survive horizontal scaling) you get durable storage with a global CDN URL out of the box.

Files you don't want public — user documents, private exports — are stored as private files, and your route mints an expiring signed URL only after it checks the requester's permissions. Billing is prepaid credits, so a side project and a production API draw from the same model without a tier negotiation. Building the frontend too? Pair this with the React and Next.js guides linked below.

Benefits With No Complexity

Global CDN delivery

Your files are served from 450+ edge locations worldwide.

Edge-cached worldwide

Files are cached close to your users for fast delivery.

Signed-URL security

Private files stay protected with time-limited access.

What You Get

Unlimited files

Upload as many files as you need.

Unlimited storage

There is no storage limit.

Public + Private storage

Private files are fully secured.

CDN ready links

Upload directly to 450+ edge locations worldwide.

Prepaid credits

No subscription. Pay only for the storage and bandwidth you use.

More coming soon

We have plenty of features coming!

How files.link Works

1. Upload

Create a project and upload your first file.

2. Copy

Copy the CDN link.

3. Use Anywhere

Paste and enjoy the blazing speed.

Why Developers Choose files.link

A Better Way to Store & Deliver Files

AWS S3 (aws-sdk)Vercel BlobMulter + local diskfiles.link
No SDK dependency (just fetch)
No IAM / credential signing
Built-in global CDN
Durable across restarts & scaling
Works in any Node framework & serverless
Prepaid credits billing

Calculate Your Needs

Storage

0GB

Egress

0GB

CDN Bandwidth

0GB
Total: $0.000/month

Start Storing Files with Node.js

  • Global CDN delivery
  • Edge-cached worldwide
  • Signed-URL security
  • Unlimited files
  • Unlimited storage
  • Public + Private storage
  • No subscription — prepaid credits keep spend predictable
Start Storing Files with Node.js

Frequently Asked Questions

How do I upload from Express?
Take the file with multer, then run three fetch calls: POST /v1/files/{folderId} for a presigned URL and id, PUT the req.file.buffer to it, then POST /v1/files/confirm-upload with { ids: [id] }. Use your raw API key as the Authorization header and save the returned CDN URL.
Does it work with Fastify and Nest?
Yes. The three-call REST flow is framework-agnostic. Use @fastify/multipart or Nest's FileInterceptor to receive the upload, then forward the buffer with fetch or axios.
Why not just use the AWS SDK?
The SDK pulls in a dependency tree and the full IAM surface — users, policies, a separate CDN distribution, credential resolution. files.link is three HTTP calls with a raw API key and a CDN URL in the response, with no SDK to keep updated.
Is it good for serverless functions?
Yes — arguably better. There's no SDK to initialize on cold start and no connection pool to manage. Each invocation just makes stateless HTTP calls, which keeps cold starts lean in Lambda or Cloud Functions.
How do I store private user files?
Upload them as private files. In the route that serves them, check the requester's permission and mint an expiring signed URL, so a download link can't be reshared past its window.
General Questions
Is there a subscription?
No. files.link uses prepaid credits, so storage, bandwidth, and API usage are deducted from your balance as you go. The app explains the payment step before uploads are enabled — no monthly subscription and no per-user fees.
What is files.link?
files.link is a developer-first file platform that makes it simple to store, secure, and deliver files globally. It provides signed URLs, public/private access, and an API-first design so you can integrate file delivery into any app without the usual complexity.
How does billing work?
files.link uses prepaid credits. As you use storage, bandwidth, and API requests, credits are deducted daily. When your balance runs low, we automatically recharge it using your saved card. If an auto-recharge doesn't go through, your files and links stay put — you simply update your payment method or top up manually to keep going. No monthly subscriptions — just simple usage-based pricing.
How secure is my data?
All files are encrypted at rest and in transit. You can use signed URLs for private files, control access with permissions, and rely on enterprise-grade infrastructure for data protection.

Related

files.link
Copyright © 2026
All rights reserved
ContactGuidesGlossaryStatusLegal