当前位置: 首页 > 后端技术 > Node.js

express的中间件multer接收文件类型数据的使用

时间:2023-04-03 17:41:01 Node.js

前言

标签的enctype属性设置提交表单数据的编码方式。可选值有3个:application/x-www-form-urlencodedmultipart/form-datatext/plain第一种:这是默认的编码方式。它只处理表单域中的value属性值,使用这种编码方式的表单会将表单域的值处理成一个URL。第二种:这种编码方式会将表单数据以二进制流的形式进行处理。这种编码方式会将file字段指定的文件内容封装到请求参数中。第三种方法:当表单的action属性值为mailto:URL形式时,这种方法比较方便。这种方式主要适用于直接通过表单发送邮件。前端标签用于提交文件。需要注意的是,这个标签的值并不是选中文件的内容,而是文件的全路径名。前面提到,提交表单时,如果使用默认编码,则不会提交文件内容。因此在表单中提交文件内容时必须使用multipart/form-data编码方式,这就需要在服务器端从提交的二进制流中读取文件内容。后端中间件的使用一般分为两种:使用app.use的形式作为路由中的参数和使用express中间件multer接收上传的文件,multer中间件作为路由中的参数的。multer只会解析设置为enctype="multipart/form-data"的表单。multer可以自定义存储引擎multer会将上传的信息和内容挂载到request对象中具体使用步骤:首先导入multer中间件constmulter=require('multer');第二次调用multerconstupload=multer({dest:'uploads/'});//不是这样multer(options)接受一个options对象,最基本的就是dest属性,这个会告诉multer把上传的文件保存到哪里。如果省略选项对象,文件将保存在内存中,永远不会写入磁盘。dest的意思是选择一个路径来存放文件,但是这样写有一个小问题,保存的文件没有后缀。所以我们使用如下配置项我们一般使用一个配置项:conststorage=multer.diskStorage({//用于配置文件上传目的地的位置:(req,file,cb)=>{//调用cb即可实现上传位置的配置cb(null,'./public/uploads')},//用于配置上传文件的名称(包括后缀)filename:(req,file,cb)=>{//filename用于判断文件夹中的文件名,如果不设置filename,则每个文件都会设置为一个随机的不带扩展名的文件名。//获取文件后缀letext=path.extname(file.originalname)//拼凑文件名cb(null,file.fieldname+'-'+Date.now()+ext)}})constupload=multer({storage:storage})router.post('/uploader',upload.single('pic'),(req,res)=>{//upload.single('pic')意思是告诉multer只接收一个名为pic的文件//响应成功的文件给浏览器res上传信息.json(req.file)})重要提示:这里必须注意一个路径问题。如果在app.js中引入admin路由,在destination中设置路径时,是相对于app.js设置的。Tips获取文件扩展名的方式(都是原生的)path.parse()path.extname()path.extname('index.html')//return:'.html'path.extname('index.coffee.md')//returns:'.md'path.parse('/home/user/dir/file.txt')//returns//{//root:'/',//dir:'/home/user/dir',//base:'file.txt',//ext:'.txt',//name:'file'//}