express,multer,jQuery前端后端上传单个文件
先安装基本的模块
$ npm init -y
$ npm install express –save
$ npm install multer –save
附上multer的github当中别人汉化的API文档
我这使用的nodemon,如果那么使用node运行,修改记得重启
开始创建基本express(上传图片)
当前目录下创建fileup.js文件
1 | const express = require("express"); |
测试是否正常
这里使用postman测试

测试没有问题再继续,不然后期很难改
前端部分
当前目录下创建up.html
1 |
|
前端需要注意的
注意formData.append和formData.set区别
- formData.append是如果存在值则会添加到后面,就像[{…},{…}]一样
- formData.set是会覆盖前面的,只保留一个
jQuery上传数据的时候,记得设置下面二点
- “processData”: false
- “contentType”: false
formData.append(“fileusers“, fileInput.files[0]); 当中fileusers在这里的作用
- 后端multer需要通过用户定义的key,在这里也就是fileusers来设置数据
new FormData();如果需要传入参数,是传入form标签对应的DOM元素
multer使用
- 大体分为而部分
- 根据multer({})创建一个变量(对文件的一些设置和过滤),比如说 var fileOption = multer({})
- 依据这个变量创建单例fileOption.single(key)或者fileOption.array(key,maxcount)
- 使用这个单例作为过滤器来对文件进行过滤和操作(也就是中间件)
multer({})创建一个变量当中一些可以设置的(具体可以参考官网)
limits{对象}(一个对象,指定一些数据大小的限制)
Key Description Default fieldNameSize
field 名字最大长度 100 bytes fieldSize
field 值的最大长度 1MB fields
非文件 field 的最大数量 无限 fileSize
在 multipart 表单中,文件最大长度 (字节单位) 无限 files
在 multipart 表单中,文件最大数量 无限 parts
在 multipart 表单中,part 传输的最大数量(fields + files) 无限 headerPairs
在 multipart 表单中,键值对最大组数 2000 fileFilter{函数}设置一个函数来控制什么文件可以上传以及什么文件应该跳过
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15function fileFilter (req, file, cb) {
// 这个函数应该调用 `cb` 用boolean值来
// 指示是否应接受该文件
// 拒绝这个文件,使用`false`,像这样:
cb(null, false)
// 接受这个文件,使用`true`,像这样:
cb(null, true)
// 如果有问题,你可以总是这样发送一个错误:
cb(new Error('I don\'t have a clue!'))
}storage{返回值} 为运行multer.diskStorage({设置参数})的返回值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21const storage = multer.diskStorage({
//定义文件存储位置
destination: function (req, file, cb) {
//回调函数file当中
/* file对象的内容{
fieldname: 'fileusers',//通过formData.append(key,value)添加的key值
originalname: '_1464815392_.bmp',//文件名
encoding: '7bit',//编码
mimetype: 'image/bmp' //mimeType类型
} */
//cb(null,存储路径)
cb(null, './myfile');//可能是以fileup.js在哪里运行为基准的参考的
},
//重定义上传的文件
filename: function (req, file, cb) {
//cb(null,新文件名称)
cb(null, file.fieldname + '-' + Date.now())
}
})
const upload = multer({ storage: storage })
multer代码
当前目录下创建fileup.js文件和myfile文件夹
1 | const express = require("express"); |
multer部分需要注意的
- 如果使用app.post(“/file”, uploadOption.single(“fileusers”),(req, res) => { });好像无法处理文件过大时候的异常
- 如果使用上面fileup.js文件当中的方式,可以在回调当中处理文件过大时候的异常
- 如果设置了文件过滤,那么遇到不符合的文件扩展名,req.file的值会为undefined
- 如果设置了fileFilter文件过滤,一定要设置cb(null,true)(通过),或者cb(null,false);(不通过),不然留空的话数据会一直处于”pending”状态
具体文件目录结构和参考完整代码下载
启动后浏览器输入http://localhost:3000/up.html
目录文件结构
参考完整代码下载
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 梦洁小站-属于你我的小天地!
评论