本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2019-11-24
安装:npm install multer
const express = require('express');
const multer = require('multer');
const fs = require('fs');
const pathLib = require('path');
var server = express();
// bodyParser只能用来解析post数据 application/x-www-form-urlencoded
// multer解析post文件 multipart/form-data
// 需要一个multer函数返回的对象
// dest选项 指定接收的文件放在哪个目录
var objMulter = multer({dest: './upload'});
// 只接受名字是f1的文件
// server.use(objMulter.single('f1'))
// <input type="file" name="f1"/>
// any 可以接受任意文件
server.use(objMulter.any())
server.post('/', function (req, res) {
console.log(req.body); // post数据
console.log(req.files); // post文件
// pathLib.parse(file_path)之后 返回一个对象 有4个主要属性
// base : 文件全名
// ext:扩展名
// dir: 文件路径
// name: 文件名 不包括扩展名
var oldName = req.files[0].path;
var newName = req.files[0].path + pathLib.parse(req.files[0].originalname).ext
// 2.重命名
// 接受上传的目录中保存的是名字为29eeb193fb5dbd49711617a4303e04b5的二进制文件 而不是一张图片
// 需要使用fs来重命名 加上文件后缀 fs.rename()
// 三个参数 原文件路径 新文件路径 回调函数
fs.rename(oldName, newName, function (err, data) {
if (err) {
res.send('上传失败')
} else {
res.send('成功')
}
})
})
server.listen(8081);
// req.files 未指定dest之前 接收到的二进制数据
// [ { fieldname: 'f1',
// originalname: '5a94b3a06f1e7.jpg',
// encoding: '7bit',
// mimetype: 'image/jpeg',
// buffer:
// <Buffer ff d8 ff e1 29 55 45 78 69 66 00 00 49 49 2a 00 08 00 00 00 10 ... >,
// size: 1703495 } ]
// req.files 指定dest 接收文件夹之后,接收到的是上传之后的文件名
// [ { fieldname: 'f1',
// originalname: '5a94b3a06f1e7.jpg',
// encoding: '7bit',
// mimetype: 'image/jpeg',
// destination: './upload',
// filename: '29eeb193fb5dbd49711617a4303e04b5',
// path: 'upload/29eeb193fb5dbd49711617a4303e04b5',
// size: 1703495 } ]