Ignore file if it exists already, return its url

This commit is contained in:
Pitu 2017-01-21 03:49:04 -03:00
parent 02e44ce48d
commit cfba738995
1 changed files with 84 additions and 34 deletions

View File

@ -3,7 +3,7 @@ const config = require('../config.js')
const multer = require('multer')
const randomstring = require('randomstring')
const db = require('knex')(config.database)
//const crypto = require('crypto')
const crypto = require('crypto')
const fs = require('fs')
let uploadsController = {}
@ -46,11 +46,11 @@ uploadsController.upload = function(req, res, next){
if(req.files.length === 0) return res.json({ success: false, description: 'no-files' })
let files = []
//let existingFiles = []
let existingFiles = []
let iteration = 1
req.files.forEach(function(file) {
/*
// Check if the file exists by checking hash and size
let hash = crypto.createHash('md5')
let stream = fs.createReadStream('./' + config.uploads.folder + '/' + file.filename)
@ -62,41 +62,77 @@ uploadsController.upload = function(req, res, next){
stream.on('end', function () {
let fileHash = hash.digest('hex') // 34f7a3113803f8ed3b8fd7ce5656ebec
})*/
db.table('files').where({
hash: fileHash,
size: file.size
}).then((dbfile) => {
files.push({
name: file.filename,
original: file.originalname,
type: file.mimetype,
size: file.size,
ip: req.ip,
albumid: album,
timestamp: Math.floor(Date.now() / 1000)
if(dbfile.length !== 0){
uploadsController.deleteFile(file.filename).then(() => {}).catch((e) => console.error(e))
existingFiles.push(dbfile[0])
}else{
files.push({
name: file.filename,
original: file.originalname,
type: file.mimetype,
size: file.size,
hash: fileHash,
ip: req.ip,
albumid: album,
timestamp: Math.floor(Date.now() / 1000)
})
}
if(iteration === req.files.length)
return something(req, res, files, existingFiles)
iteration++
})
})
})
})
}
function something(req, res, files, existingFiles){
let basedomain = req.get('host')
for(let domain of config.domains)
if(domain.host === req.get('host'))
if(domain.hasOwnProperty('resolve'))
basedomain = domain.resolve
if(files.length === 0){
return res.json({
success: true,
files: existingFiles.map(file => {
return {
name: file.name,
size: file.size,
url: 'http://' + basedomain + '/' + file.name
}
})
})
}
db.table('files').insert(files).then(() => {
for(let efile of existingFiles) files.push(efile)
res.json({
success: true,
files: files.map(file => {
return {
name: file.name,
size: file.size,
url: 'http://' + basedomain + '/' + file.name
}
})
})
db.table('files').insert(files).then(() => {
let basedomain = req.get('host')
for(let domain of config.domains)
if(domain.host === req.get('host'))
if(domain.hasOwnProperty('resolve'))
basedomain = domain.resolve
res.json({
success: true,
files: files.map(file => {
return {
name: file.name,
size: file.size,
url: 'http://' + basedomain + '/' + file.name
}
})
})
}).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) })
})
}).catch(function(error) { console.log(error); res.json({success: false, description: 'error'}) })
}
uploadsController.delete = function(req, res){
@ -128,6 +164,20 @@ uploadsController.delete = function(req, res){
}
uploadsController.deleteFile = function(file){
return new Promise(function(resolve, reject){
fs.stat('./' + config.uploads.folder + '/' + file, function (err, stats) {
if (err) { return reject(err) }
fs.unlink('./' + config.uploads.folder + '/' + file, function(err){
if (err) { return reject(err) }
return resolve()
})
})
})
}
uploadsController.list = function(req, res){
if(req.headers.auth !== config.adminToken)