使用busBoy和fs模块完成文件的上传

首先我们需要去下载
express 用于路由的访问
busboy 用于解析接受的参数
fs 用于创建可写入的流

const app = require('express')();
const Busboy = require('busboy');
const fs = require('fs');
//事件监听制的解析文件,支持上传多个
app.post('/testBuyBoy', (req, res, next) => {
    const busboy = new Busboy({ headers: req.headers });//通过请求头创建BusBoy对象
    busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {//字段名,文件,文件名,编码格式,文件类型
        //console.log('文件   =  ','file','文件名称 =  ',filename,' 编码格式   =  ',encoding,'文件类型  =   ',mimetype);
        file.on('data', function (data) {//监听data事件,接受传递来的文件,如果文件过大,此事件会被执行多次
            //console.log('File [' + fieldname + '] got ' + data.length + ' bytes');
        });
        let arr = [];
        arr = filename.toString().split('.');//对传递的文件名进行拆分
        const pathData = arr[0] + '(' + parseInt(Date.parse(new Date()).toString().substr(0, 10)) + ')';//文件名+十位时间戳.文件类型
        file.pipe(fs.createWriteStream('upload/' + pathData + '.' + arr[1]));//利用fs模块创建可以写入的流,并指定保存路径和名称
        file.on('end', function () {//监听end事件,文件数据接受完毕,关闭这个可写流
            //console.log('File [' + fieldname + '] Finished');
        });
    });
    busboy.on('field', function (fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
        //console.log('Field [' + fieldname + ']: value: ' + inspect(val));
    });
    busboy.on('finish', function () {//指定完成后的操作,完成后关闭页面并跳转至根路径 / 
        //console.log('Done parsing form!');
        //res.writeHead(303, { Connection: 'close', Location: '/' });
        res.end();
    });
    req.pipe(busboy);
});

module.exports = app;

然后再在app.js入口文件中配置公开文件夹路径可以进行测试

const createError = require('http-errors');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const logger = require('morgan');

const indexRouter = require('./routes/index');
const usersRouter = require('./routes/users');
const busRouter = require('./routes/testBusBoy');
const userTest = require('./server/user/router/index');
const mongo = require('./mongodb-config/mongoConfig');
const redis = require('./redis-config/redis-config')
var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'upload')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/userTest',userTest);
app.use('/busTest',busRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

猜你喜欢

转载自blog.csdn.net/qq_42427109/article/details/88799898