NodeJs(Web篇)Express框架(三)中间件multer
时间:2019-02-16
本文章向大家介绍NodeJs(Web篇)Express框架(三)中间件multer,主要包括NodeJs(Web篇)Express框架(三)中间件multer使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
multer是express中用来处理文件上传的一个组件
文件接受类型:
1.upload.single('classname1'); //接受单一类的文件,只有一个
2.upload.array('classname2', num);//接受单一类的文件,有最大上传限制
3.upload.fields([{ name: 'classname3', maxCount: 1 }, { name: 'classname4', maxCount: 2 }]);//接受多类文件,各自有最大上传限制
4.upload.none();//只接受文本域,以这种方式上传别的文件格式,则会报错
5.upload.any();//可以接受任何文件
注意:客户端的post格式为:enctype="multipart/form-data"
文件储存控制:
文件接受了需要处理储存问题,主要有两种储存形式,1.储存在硬盘中,2.纯在在内存中
一.内存储存方式:
var storage = multer.memoryStorage()
var upload = multer({ storage: storage })
二.硬盘储存方式:
其中硬盘储存又两种方式:
(1)var upload = multer({ dest: "/path"});//只是控制文件的储存位置
(2)可以控制文件的储存,1.修改储存位置,2.修改储存名字(文件接受的时候治愈后一串字符)
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./uploads");
},
filename: function (req, file, cb) {
let obj = pathLib.parse(file.originalname);
//修改文件的储存名字
let newName = file.fieldname + "_" + (new Date().getTime()) + obj.ext;
cb(null, newName);
}
});
限制文件接受:
遇到再说
错误处理:
遇到再说
下面附上服务端代码和客户端代码:server.js
var multer = require('multer');
var express = require('express');
var pathLib = require('path');
var server = express();
server.listen(233);
console.log('server start');
//可以控制文件的储存,1.储存位置,2.储存名字
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./uploads");
},
filename: function (req, file, cb) {
let obj = pathLib.parse(file.originalname);
let newName = file.fieldname + "_" + (new Date().getTime()) + obj.ext;
cb(null, newName);
}
});
//1. 使用diskStorage方式可以控制储存位置和文件名字
var upload = multer({ storage: storage});
//2. 使用dest只能控制文件储存位置
//var upload = multer({ dest: "/path"});
//单一文件的上传,如果接口onefile相同,但是文件名不同,则会报错
server.post('/onefile', upload.single('example1'), function (req, res, next) {
var file = req.file;
//single只有file,没有files(undefine)
var files = req.files;
console.log("type_onefile name : ", file.filename);
next();
});
//同一类文件上传,如果超出了限制数量会报错
server.post('/arronefile', upload.array('example2', 2), function (req, res, next) {
//如果是多个,则file为undefine
var file = req.file;
var files = req.files;
for (let i in files) {
console.log("type_arrnoefile name : ", file.filename);
}
next();
});
//多类文件上传, 如果超出了限制数量也会报错
server.post('/arrmanyfile',
upload.fields([{ name: 'example3', maxCount: 1 }, { name: 'example4', maxCount: 2 }]),
function (req, res, next) {
//文件存在对象的对应名字下
// {example3: Array(1)[Object],
// example4: Array(1)[Object]}
let files = req.files;
next();
});
//文本域上传,只接受文本域,如是其他格式文件会报错
server.post('/text-only', upload.none(), function (req, res, next) {
let file = req.file;
let files = req.files;
//textarea在req.body中获取
next();
});
//任意文件上传
server.post('/anyfile', upload.any(), function (req, res, next) {
//file为undifine files为数组
let file = req.file;
let files = req.files;
for (let i in files) {
console.log("type_anyfile name : ", file.filename);
}
next();
});
server.use('/', function (req, res) {
console.log("some one connect!");
res.end();
});
客户端代码:upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>文件上传</title>
</head>
<body>
<form action="http://localhost:233/onefile" method="post" enctype="multipart/form-data">
<input type="file" name="example1"> <br>
<input type="submit" name="" value="上传"> <br>
</form>
<br>
<form action="http://localhost:233/arronefile" method="post" enctype="multipart/form-data">
<input type="file" name="example2"> <br>
<input type="file" name="example2"> <br>
<input type="file" name="example2"> <br>
<input type="submit" name="" value="上传">
</form>
<br>
<form action="http://localhost:233/arrmanyfile" method="post" enctype="multipart/form-data">
<input type="file" name="example3"> <br>
<input type="file" name="example3"> <br>
<input type="file" name="example4"> <br>
<input type="file" name="example4"> <br>
<input type="submit" name="" value="上传">
</form>
<form action="http://localhost:233/text-only" method="post" enctype="multipart/form-data">
<input type="textarea" name="textonly"> <br>
<input type="submit" name="" value="上传"> <br>
</form>
<form action="http://localhost:233/anyfile" method="post" enctype="multipart/form-data">
<input type="file" name="anyfile1"> <br>
<input type="file" name="anyfile2"> <br>
<input type="submit" name="" value="上传"> <br>
</form>
</body>
</html>
- Python调用C函数的方法以及如何编写Python的C扩展
- C# 中使用 RSA加解密算法
- Tensorflow实践:用神经网络训练分类器
- 理解闭包 js回收机制
- java 解析 XML实例
- Java 线程内异常处理
- Raphael path 拖动实现
- 黑猿大叔-译文 | TensorFlow实现Batch Normalization
- Java后端WebSocket的Tomcat实现
- jwplayer 隐藏属性方法记载
- TensorFlow从0到1丨开篇:Hello TensorFlow !
- JS原型继承和类式继承
- 在Servlet的init方法中创建线程
- TensorFlow从0到1丨第2篇:TensorFlow核心编程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel 之 Eloquent 模型修改器和序列化示例
- TP5框架请求响应参数实例分析
- laravel 模型查询按照whereIn排序的示例
- 解决在laravel中auth建立时候遇到的问题
- php array 转json及java 转换 json数据格式操作示例
- Thinkphp5 如何隐藏入口文件index.php(URL重写)
- 在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
- thinkphp5使html5实现动态跳转的例子
- php 自定义函数实现将数据 以excel 表格形式导出示例
- 解决tp5在nginx下修改配置访问的问题
- 在PHP中实现使用Guzzle执行POST和GET请求
- c 语言函数指针之回调函数
- 解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
- php和js实现根据子网掩码和ip计算子网功能示例
- php ZipArchive实现多文件打包下载实例