Skip to content

Instantly share code, notes, and snippets.

@rbreslow
Created April 23, 2015 19:50
Show Gist options
  • Save rbreslow/8ec330a4f9b2d1dcf98f to your computer and use it in GitHub Desktop.
Save rbreslow/8ec330a4f9b2d1dcf98f to your computer and use it in GitHub Desktop.
var express = require('express')
, multer = require('multer')
, shortid = require('shortid')
, level = require('level')
, fs = require('fs')
, hashFiles = require('hash-files')
, RSVP = require('rsvp')
, app = express()
, db = level(__dirname + '/db/')
var getChecksum = function(fileName) {
var promise = new RSVP.Promise(function(resolve) {
hashFiles({files:[__dirname + '/uploads/' + fileName]}, function(err, hash) {
if(!err) resolve(hash)
});
})
return promise
}
var fileExists = function(fileHash) {
var promise = new RSVP.Promise(function(resolve) {
db.get(fileHash, function(err, value) {
resolve(value)
})
})
return promise
}
app.get('/', function (req, res) {
res.send('sup')
})
app.get('/:file', function (req, res) {
res.sendFile(req.params.file, {root:__dirname + '/uploads/'}, function(err) {
if(err) res.status(404).send('sup')
})
})
app.post('/api/upload',
multer({
dest: './uploads/',
limits: {
fileSize: 100000000
},
rename: function (fieldname, filename, req, res) {
return shortid.generate()
},
onFileUploadComplete: function (file, req, res) {
getChecksum(file.name)
.then(function(fileHash) {
return fileExists(fileHash)
}).then(function(value) {
if(value) {
res.status(200).json({status:200,file:value})
fs.unlinkSync(__dirname + '/uploads/' + file.name)
} else {
res.status(200).json({status:200,file:file.name})
db.put(hashFiles.sync({files:[__dirname + '/uploads/' + file.name]}), file.name)
}
})
}
}),
function (req, res) {
res.status(400).json({status:400,err:'no file uploaded'})
})
app.get('*', function(req, res){
res.status(404).send('sup')
});
app.listen(8081)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment