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

46 篇文章 0 订阅
30 篇文章 0 订阅

首先我们需要去下载
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;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值