process.env.TMPDIR = 'tmp' // to avoid the EXDEV rename error, see http://stackoverflow.com/q/21071303/76173 const express = require('express') const multipart = require('connect-multiparty') const multipartMiddleware = multipart() const uploader = require('./uploader-node.js')('tmp') const app = express() const fs = require('fs') // Configure access control allow origin header stuff const ACCESS_CONTROLL_ALLOW_ORIGIN = true // Host // app.use(express.static(__dirname + '/../docs')) // Handle uploads through Uploader.js app.post('/upload', multipartMiddleware, function (req, res) { uploader.post(req, function (status, filename, original_filename, identifier) { console.log('POST', status, original_filename, identifier) if (ACCESS_CONTROLL_ALLOW_ORIGIN) { res.header('Access-Control-Allow-Origin', '*') res.header('Access-Control-Allow-Headers', 'content-type') } if (status === 'done') { const s = fs.createWriteStream('./uploads/' + filename) s.on('finish', function () { res.status(200) }) uploader.write(identifier, s, { end: true }) } else { res.status(/^(partly_done|done)$/.test(status) ? 200 : 500) } const data = { result: true, message: '' } res.send(data) }) }) app.options('/upload', function (req, res) { console.log('OPTIONS') if (ACCESS_CONTROLL_ALLOW_ORIGIN) { res.header('Access-Control-Allow-Origin', '*') res.header('Access-Control-Allow-Headers', 'content-type') } res.status(200).send() }) // Handle status checks on chunks through Uploader.js app.get('/upload', function (req, res) { uploader.get(req, function (status, filename, original_filename, identifier) { console.log('GET', status) if (ACCESS_CONTROLL_ALLOW_ORIGIN) { res.header('Access-Control-Allow-Origin', '*') } if (status == 'found') { status = 200 } else { status = 204 } res.status(status).send() }) }) app.get('/download/:identifier', function (req, res) { uploader.write(req.params.identifier, res) }) app.listen(3000, function () { console.log('Server started...') })