Express教程04:处理文件上传

阅读更多系列文章请访问个人GitHub博客,示例代码请访问这里

使用multer处理文件上传

处理文件上传,天然也离不开中间件的帮助,此处以Multer为例介绍一下文件上传中间件的使用。html

但Multer只能处理enctype="multipart/form-data"的form表单提交的数据。git

示例代码:/lesson04/server.jsgithub

  1. 安装Multer:npm install --save multerexpress

  2. 引入Multer:npm

    const multer = require('multer')
    复制代码
  3. 设置保存上传文件路径:json

    const upload = multer({
      dest: './static/upload'
    })
    复制代码
  4. 处理上传文件:bash

    server.use(upload.any())
    复制代码
  5. 接收文件上传结果:服务器

    server.post('/upload', (req, res, next) => {
      console.log(req.files)
    })
    复制代码

启动服务器后,访问http://localhost:8080/index.html,上传一个文件,就能够看到控制台打印的结果:app

[ { fieldname: 'file',
    originalname: '091557_Dp1c_3669181.png',
    encoding: '7bit',
    mimetype: 'image/png',
    destination: './static/upload',
    filename: '8952900376066f666af68c019ad85993',
    path: 'static\\upload\\8952900376066f666af68c019ad85993',
    size: 136586 } ]
复制代码

同时能够看到在/lesson04/static/upload文件夹中,有一个名为8952900376066f666af68c019ad85993的文件,即为上传的文件。less

使用body-parser补充处理数据

Multer的不足之处是没法处理普通表单提交的数据,以及经过Fetch提交的数据,因此须要配合body-parser使用,完整代码以下:

示例代码:/lesson04/server.js

const express = require('express')
const bodyParser = require('body-parser')

const server = express()

server.listen(8080)

// 引入Multer
const multer = require('multer')

// 设置保存上传文件路径
const upload = multer({
  dest: './static/upload'
})

// 处理上传文件
server.use(upload.any())

// 处理表单提交,对应请求头application/x-www-form-urlencoded
server.use(bodyParser.urlencoded({
  extended: false // 为true时将使用qs库处理数据,一般不须要
}))

// 处理fetch请求,对应请求头application/json
server.use(bodyParser.json())

// 接收文件上传结果
server.post('/upload', (req, res, next) => {
  console.log(req.body)
  console.log(req.files)
  res.send({
    error: 0,
    data: req.body,
    msg: '上传成功'
  })
})

server.get('/reg', (req, res, next) => {
  console.log(req.query)
  res.send({
    error: 0,
    data: req.query,
    msg: '注册成功'
  })
})


server.post('/login', (req, res, next) => {
  console.log(req.body)
  res.send({
    error: 0,
    data: req.body,
    msg: '登录成功'
  })
})

server.use(express.static('./static/'))

console.log(`Server started at 8080`)
复制代码

此时填写表单并上传文件,控制台打印的结果为:

[Object: null prototype] { username: 'test', password: 'test' }
[ { fieldname: 'file',
    originalname: '091557_Dp1c_3669181.png',
    encoding: '7bit',
    mimetype: 'image/png',
    destination: './static/upload',
    filename: '266005473a95b69207dd145241439db0',
    path: 'static\\upload\\266005473a95b69207dd145241439db0',
    size: 136586 } ]
复制代码

能够看到表单数据和文件都已经处理完毕。

相关文章
相关标签/搜索