@webgeodatavore/tus-node-server
v0.2.3
Published
Node.js tus server
Downloads
7
Maintainers
Readme
tus-node-server
tus is a new open protocol for resumable uploads built on HTTP. This is the tus protocol 1.0.0 node.js server implementation.
Installation
$ npm install tus-node-server
Flexible Data Stores
Local File Storage
server.datastore = new tus.FileStore({ path: '/files' });
Google Cloud Storage
server.datastore = new tus.GCSDataStore({ path: '/files', projectId: 'project-id', keyFilename: 'path/to/your/keyfile.json', bucket: 'bucket-name', });
Amazon S3 (coming soon)
server.datastore = new tus.S3Store({ path: '/files', bucket: 'bucket-name', });
Quick Start
Use the tus-node-deploy Docker image
$ docker run -p 49160:8080 -d bhstahl/tus-node-deploy
Build a standalone server yourself
const tus = require('tus-node-server');
const server = new tus.Server();
server.datastore = new tus.FileStore({
path: '/files'
});
const host = '127.0.0.1';
const port = 8000;
server.listen({ host, port }, () => {
console.log(`[${new Date().toLocaleTimeString()}] tus server listening at http://${host}:${port}`);
});
Use tus-node-server as Express Middleware
const tus = require('tus-node-server');
const server = new tus.Server();
server.datastore = new tus.FileStore({
path: '/files'
});
var app = express();
app.all('/files/*', function(req, res) {
server.handle(req, res);
});
app.listen(port, host);
Features
Events:
Execute code when lifecycle events happen by adding event handlers to your server.
const Server = require('tus-node-server').Server;
const EVENTS = require('tus-node-server').EVENTS;
const server = new Server();
server.on(EVENTS.EVENT_UPLOAD_COMPLETE, (event) => {
console.log(`Upload complete for file ${event.file.id}`);
});
EVENT_FILE_CREATED
: Fired when aPOST
request successfully creates a new fileExample payload:
{ file: { id: '7b26bf4d22cf7198d3b3706bf0379794', upload_length: '41767441', upload_metadata: 'filename NDFfbWIubXA0' } }
EVENT_ENDPOINT_CREATED
: Fired when aPOST
request successfully creates a new upload endpointExample payload:
{ url: 'http://localhost:8000/files/7b26bf4d22cf7198d3b3706bf0379794' }
EVENT_UPLOAD_COMPLETE
: Fired when aPATCH
request finishes writing the fileExample payload:
{ file: { id: '7b26bf4d22cf7198d3b3706bf0379794', upload_length: '41767441', upload_metadata: 'filename NDFfbWIubXA0' } }
Custom GET
handlers:
Add custom GET
handlers to suit your needs, similar to Express routing.
const server = new Server();
server.get('/uploads', (req, res) => {
// Read from your DataStore
fs.readdir(server.datastore.path, (err, files) => {
// Format the JSON response and send it
}
});
Custom file names:
const fileNameFromUrl = (req) => {
return req.url.replace(/\//g, '-');
}
server.datastore = new tus.FileStore({
path: '/files',
namingFunction: fileNameFromUrl
});
Development
Start the demo server using Local File Storage
$ npm run demo
Or start up the demo server using Google Cloud Storage
$ npm run gcs_demo
Then navigate to the demo (localhost:8000) which uses tus-js-client