UNPKG

http-up

Version:

Simple share folder via http with upload

66 lines (49 loc) 2.1 kB
import fs from 'node:fs/promises'; import path from 'node:path'; import chalk from 'chalk'; import multer from 'multer'; import config from '../config.js'; import * as util from '../util.js'; import * as model from '../../model/index.js'; export const post_file = (app, argv) => { const upload = multer({ dest: config.httpup_temp, limits: { fieldSize: config.fieldSize_max }, }); const postProcessing = upload.fields([{ name: 'fileBlob', maxCount: config.files_count_max }]); app.post('/api/file', postProcessing, async (req, res, next) => { let readFolder = path.join(argv.fold, util.get_referer_or_path(req)); console.log('—'.repeat(process.stdout.columns)); model.event_log.write(res, req, 200, 'api/file', 'Upload files to ' + chalk.yellow(readFolder)); let promises = []; let errors = []; req.files.fileBlob.forEach((el, indx) => { let fileName = decodeURIComponent(el.originalname); fileName = util.http_path_clear(fileName); fileName = fileName.replace(/\//g, ''); let name = util.get_name(fileName); let ext = util.get_ext_norm(fileName); name = name.replace(/\s{1,}/g, '-'); name = name.replace(/\-{2,}/g, '-'); name += '.' + ext; let target_file_path = path.join(readFolder, name); let p = fs .copyFile(el.path, target_file_path) .then(() => { model.event_log.write(res, req, 200, 'api/file', 'File ' + chalk.green(target_file_path) + ' was saved'); }) .catch((err) => { errors.push(err.message); }); promises.push(p); }); await Promise.all(promises); if (errors.length > 0) { model.event_log.write(res, req, 500, 'api/file', errors[0]); res.status(500).json({ code: 500, msg: errors[0] }); return; } res.status(200).json({ code: 200 }); return; }); };