file upload mmiddleware only on valid routes, 10 banners at a time upload, and show how many _new_ banners uploaded

merge-requests/208/head
fatchan 5 years ago
parent 09412d5e85
commit 36a3755dca
  1. 30
      controllers/forms.js
  2. 15
      models/forms/uploadbanners.js
  3. 15
      server.js

@ -6,6 +6,32 @@ const express = require('express')
, Posts = require(__dirname+'/../db/posts.js')
, Mongo = require(__dirname+'/../db/db.js')
, remove = require('fs-extra').remove
, upload = require('express-fileupload')
, path = require('path')
, postFiles = upload({
createParentPath: true,
safeFileNames: /[^\w-]+/g,
preserveExtension: 4,
limits: {
fileSize: 10 * 1024 * 1024,
files: 3
},
abortOnLimit: true,
useTempFiles: true,
tempFileDir: path.join(__dirname+'/../tmp/')
})
, bannerFiles = upload({
createParentPath: true,
safeFileNames: /[^\w-]+/g,
preserveExtension: 4,
limits: {
fileSize: 10 * 1024 * 1024,
files: 10
},
abortOnLimit: true,
useTempFiles: true,
tempFileDir: path.join(__dirname+'/../tmp/')
})
, removeBans = require(__dirname+'/../models/forms/removebans.js')
, makePost = require(__dirname+'/../models/forms/make-post.js')
, uploadBanners = require(__dirname+'/../models/forms/uploadbanners.js')
@ -152,7 +178,7 @@ router.post('/register', verifyCaptcha, (req, res, next) => {
});
// make new post
router.post('/board/:board/post', Boards.exists, banCheck, paramConverter, verifyCaptcha, async (req, res, next) => {
router.post('/board/:board/post', Boards.exists, banCheck, postFiles, paramConverter, verifyCaptcha, async (req, res, next) => {
let numFiles = 0;
if (req.files && req.files.file) {
@ -255,7 +281,7 @@ router.post('/board/:board/settings', csrf, Boards.exists, checkPermsMiddleware,
});
//upload banners
router.post('/board/:board/addbanners', csrf, Boards.exists, checkPermsMiddleware, paramConverter, async (req, res, next) => {
router.post('/board/:board/addbanners', bannerFiles, csrf, Boards.exists, checkPermsMiddleware, paramConverter, async (req, res, next) => {
let numFiles = 0;
if (req.files && req.files.file) {

@ -29,20 +29,27 @@ module.exports = async (req, res, next, numFiles) => {
for (let i = 0; i < numFiles; i++) {
const file = req.files.file[i];
const filename = file.sha256 + path.extname(file.name);
file.filename = filename; //for error to delete failed files
filenames.push(filename);
file.filename = filename;
//check if already exists
const exists = await pathExists(`${uploadDirectory}banner/${req.params.board}/${filename}`);
if (exists) {
await deleteTempFiles(req.files.file);
await remove(file.tempFilePath);
continue;
/* dont stop uploading the other banners just because one already exists.
return res.status(409).render('message', {
'title': 'Conflict',
'message': `Invalid file ${file.name}. Banner already exists.`,
'redirect': redirect
});
*/
}
//add to list after checking it doesnt already exist
filenames.push(filename);
//make directory if doesnt exist
await ensureDir(`${uploadDirectory}banner/${req.params.board}/`);
//get metadata from tempfile
@ -76,7 +83,7 @@ module.exports = async (req, res, next, numFiles) => {
return res.render('message', {
'title': 'Success',
'message': `Uploaded ${filenames.length} banners.`,
'message': `Uploaded ${filenames.length} new banners.`,
'redirect': redirect
});

@ -12,8 +12,7 @@ const express = require('express')
, bodyParser = require('body-parser')
, cookieParser = require('cookie-parser')
, configs = require(__dirname+'/configs/main.json')
, Mongo = require(__dirname+'/db/db.js')
, upload = require('express-fileupload');
, Mongo = require(__dirname+'/db/db.js');
(async () => {
@ -23,18 +22,6 @@ const express = require('express')
// parse forms and allow file uploads
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
app.use(upload({
createParentPath: true,
safeFileNames: true,
preserveExtension: 4,
limits: {
fileSize: 10 * 1024 * 1024,
files: 3
},
abortOnLimit: true,
useTempFiles: true,
tempFileDir: path.join(__dirname+'/tmp/')
}));
// session store
app.set('trust proxy', 1);

Loading…
Cancel
Save