UNPKG

receive

Version:

launch an HTTP file upload server from the command line

71 lines (67 loc) 2.42 kB
var Busboy = require('busboy'); var Entities = new require('html-entities'); var fs = require('fs'); var path = require('path'); var entities = new Entities.Html5Entities(); var encode = entities.encode.bind(entities); var BOOTSTRAP_CSS = '//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css'; module.exports = function(nameAndVersion, directory) { return function(request, response) { if (request.method === 'POST') { request.pipe( new Busboy({headers: request.headers}) .on('file', function(fieldName, file, fileName) { var destinationPath = path.join(directory, fileName); console.log('Writing ' + destinationPath); file.pipe(fs.createWriteStream(destinationPath)); }) .on('finish', function() { response.statusCode = 302; response.setHeader('Location', '/'); response.end(); }) ); } else if (request.method === 'GET') { response.statusCode = 200; response.end( '<!DOCTYPE html>' + '<html>' + ' <head>' + ' <link rel=stylesheet href="' + BOOTSTRAP_CSS + '">' + ' </head>' + ' <body>' + ' <div class=container>' + ' <div class=page-header>' + ' <h1>' + nameAndVersion + '</h1>' + ' </div>' + ' <div class=row>' + ' <div class=col-sm-6>' + ' <h2>Upload a file</h2>' + ' <form class=form-inline' + ' method=POST' + ' enctype="multipart/form-data">' + ' <input type=file name=file class=form-control>' + ' <button type=submit class="btn btn-default">' + ' Upload File' + ' </button>' + ' </form>' + ' </div>' + ' <div class=col-sm-6>' + ' <h2>Files in ' + directory + '</h2>' + ' <ul>' + fs.readdirSync(directory) .map(function(fileName) { return '<li>' + encode(fileName) + '</li>'; }) .join('') + ' </ul>' + ' </div>' + ' </div>' + ' </div>' + ' </body>' + '</html>' ); } }; };