formidable实现文件上传

var express = require('express')

var router = express.Router()

const { IncomingForm } = require('formidable')

const fs = require('fs')

router.post('/', function (req, res, next) {

  // 文件上传操作的配置项

  let options = {

    // 是否支持多文本上传

    multiples: true,

    // 是否保留文件的后缀名

    keepExtensions: true,

    // 指定上传文件的的存放位置

    uploadDir: 'public/images',

    // 是否允许上传空文件

    allowEmptyFiles: false,

  }

  // 创建一个IncomingForm对象

  const form = new IncomingForm(options)

  // 保存文本域数据对象

  let fields = {}

  // 保存文件域数据数组

  let files = []

  // 监听文本域的数据请求

  form.on('field', function (name, value) {

    fields[name] = value

  })

  // 监听文件域的数据请求

  form.on('file', function (formName, file) {

    files.push({ imgUrl: file.path, fileName: file.name })

  })

  // 监听数据传递结束事件

  form.on('end', function () {

    let pics = []

    // 遍历数组,修改文件名

    files.forEach((item) => {

      let oldpath = item.imgUrl

      let prefix = oldpath.substring(0, oldpath.lastIndexOf('\\') + 1)

      let fileName = Date.now() + item.fileName

      let newpath = prefix + fileName

      // 修改文件名称

      fs.renameSync(oldpath, newpath)

      let object = {}

      object.imgUrl = 'http://127.0.0.1:3000/images/' + fileName

      pics.push(object)

    })

    // 封装文本域对象

    fields.pics = pics

    // 返回数据

    res.send(fields)

  })

  form.parse(req)

})

module.exports = router

上一篇:类中反射的应用


下一篇:poj3254 Corn Fields