| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- const path = require('path');
- const fs = require('fs');
- const formidable = require('formidable')
- const {handle} = require("../tools/handle_cjs");
- const result = require("../tools/result");
- const log = require("../logger").logger("uploadMiddleware","info");
- module.exports = function (config){
- if(!config){
- throw new Error('config is undefined');
- }
- let _config = {
- tmp: config.tmp || './tmp',
- maxFileSize: config.maxFileSize || (1024*1024*2),// 默认2mb
- };
- return async function upload(req,res,next){
- log.info(`[文件上传] 开始接收上传文件`)
- let form = formidable.formidable({
- uploadDir: _config.tmp,
- multiples: true,
- keepExtensions: true,
- type: true,
- maxFileSize: _config.maxFileSize,
- filename(_fileName, _extName) {
- // console.log('---------')
- // console.log(_fileName+'.'+_extName);
- // console.log('---------')
- let time = new Date();
- // 生成随机数
- let random = Math.floor(Math.random() * 1000);
- // 生成随机字符
- let str = 'abcdefghijklmnopqrstuvwxyz';
- let randomStr = '';
- let fileName = '';
- for (let i = 0; i < 5; i++) {
- randomStr += str.charAt(Math.floor(Math.random() * str.length));
- }
- fileName = `${time.getTime()}-${random}-${randomStr}-${_fileName}${_extName}`;
- // // 随机从fileName中抽取2-6个字符添加至随机位置
- // let randomIndex = Math.floor(Math.random() * (fileName.length - 2)) + 1;
- // let randomLength = Math.floor(Math.random() * 5) + 2;
- // let randomStr2 = '';
- // for (let i = 0; i < randomLength; i++) {
- // randomStr2 += str.charAt(Math.floor(Math.random() * str.length));
- // }
- // fileName = fileName.slice(0, randomIndex) + randomStr2 + fileName.slice(randomIndex);
- return fileName;
- }
- });
- let allFile = [];
- let [err] = await handle(fs.promises.mkdir(_config.tmp));
- if(!err){
- // res.status(500);
- console.log(err);
- log.info(`[文件上传] 无法存储文件 ${err.message}`);
- result.ServerError(res, err, `无法存储文件 ${err.message}`);
- return;
- }
- await form.on('progress', function (bytesReceived, bytesExpected) { //在控制台打印文件上传进度
- let progressInfo = {
- value: bytesReceived, //当前进度
- total: bytesExpected //总进度
- };
- let bar_progress = Math.floor((progressInfo.value / progressInfo.total) * 100);
- // console.log(`当前进度: ${bar_progress}`);
- }).parse(req, function (err, fields, files) {
- if (err) {
- // res.status(500);
- log.info(`[文件上传] 文件上传失败 ${err.message}`);
- result.ServerError(res, err, `文件上传失败 ${err.message}`);
- } else {
- req.files = files;
- req.body = fields;
- next();
- }
- })
- }
- };
|