Skip to content

kukhariev/node-uploadx

Repository files navigation

node-uploadx

npm version Build status commits since latest release

Resumable upload middleware for Express and plain Node.js. Server-side component of ngx-uploadx

Features

  • resumable simple and chunked uploads
  • can save files to the local filesystem, S3, GCS
  • saving added metadata along with files
  • logging and error handling
  • chunks checksum verification
  • file type/size/custom validations
  • fixed/rolling expiration and cleanup
  • extensibility (custom storages, upload protocols, etc)

Installation Options

# Core only (local storage)
npm install @uploadx/core

# Add cloud storage support
npm install @uploadx/s3    # AWS S3, MinIO, etc.
npm install @uploadx/gcs   # Google Cloud Storage

# Or get everything in one package
npm install node-uploadx

Usage

Express example:

const express = require('express');
const { uploadx } = require('@uploadx/core');

const app = express();

app.use(
  '/uploads',
  uploadx({
    directory: './files',
    maxUploadSize: '10GB',
    allowMIME: ['video/*'],
    onComplete: file => console.log('Upload complete: ', file)
  })
);

app.listen(3003);

More examples (S3, GCS, plain Node.js, tus, logging, validation) are available in the /examples folder.

Options

The uploadx function accepts either a storage instance or storage options:

import { uploadx, DiskStorage } from '@uploadx/core';

// Option 1: Pass storage instance
const storage = new DiskStorage({ directory: './uploads' });
app.use('/files', uploadx(storage));

// Option 2: Pass options directly (creates storage automatically)
app.use('/files', uploadx({ directory: './uploads', maxUploadSize: '10GB' }));

Storage Options

  • directory DiskStorage upload directory. Default value: "files"

  • path Node http base path. Default value: "/files"

  • allowMIME Allowed MIME types. Default value: ["*/*"]

  • maxUploadSize File size limit. Default value: "5TB"

  • metaStorage Provide custom meta storage

  • metaStorageConfig Configure metadata storage

  • maxMetadataSize Metadata size limit. Default value: "4MB"

  • validation Upload validation options

  • useRelativeLocation Use relative urls. Default value: false

  • filename File naming function

  • userIdentifier Get user identity

  • onCreate Callback invoked when a new upload is created

  • onUpdate Callback invoked when an upload is updated

  • onComplete Callback invoked when an upload is completed

  • onDelete Callback invoked when an upload is cancelled

  • onError Customize error response

  • expiration Configuring the cleanup of abandoned and completed uploads

  • logLevel Set built-in logger severity level. Default value: "none"

Storage providers

By default, uploadx uses DiskStorage (local filesystem) — just set the directory option. For cloud or S3‑compatible storage, install the corresponding package and pass a storage instance to the middleware.

Provider Package Description
Local filesystem @uploadx/core Built-in. Saves files to directory.
AWS S3 / compatible @uploadx/s3 Amazon S3, Backblaze B2 S3, MinIO, etc.
Google Cloud Storage @uploadx/gcs GCS buckets.

For configuration, authentication, and usage examples, see the respective package READMEs linked above.

Logging

The library uses @logtape/logtape for structured logging. Set logLevel to enable it, or configure LogTape directly for advanced use cases.

See express-logtape.ts for a complete example.

Environment Variables

UPLOADX_SECRET - Secret for salting file/user IDs (set to random string in production).

Project Structure

This is a monorepo managed with npm workspaces:

node-uploadx/
├── packages/
│   ├── core/                 # @uploadx/core - core functionality
│   ├── s3/                   # @uploadx/s3 - S3 storage provider
│   ├── gcs/                  # @uploadx/gcs - Google Cloud Storage provider
│   └── node-uploadx/         # All-in-one package
├── examples/                 # Usage examples
│   ├── express.ts
│   ├── express-s3.ts
│   ├── express-gcs.ts
│   └── ...
├── test/                     # Test suite
├── README.md
└── ...

Contributing

If you'd like to contribute, please fork the repository and make changes as you'd like. Pull requests are welcome!

Quick Links

License

MIT License — see LICENSE for details.

About

Node.js middleware for handling resumable uploads

Topics

Resources

License

Stars

Watchers

Forks

Contributors