2/13 express 后台接受图片的简单配置( 使用 multiparty 、fs )

写在前面

  这次是总结一下昨天写的代码 当时只是囫囵吞枣 看着别人的代码一葫芦画瓢弄的

  今天仔细推敲一下

  知道依照葫芦画瓢简单,但是还是要深入本质看问题


前端  

  首先是Vue的一个组件代码( method )

  详情请见 https://www.cnblogs.com/WaterMealone/p/14399406.html

  

 后台 

  后台是由 express 弄得,既然都到这里,我觉得简单的路由配置 应该会了

  首先我们得在app,js入口文件里面加上用于解析请求体的代码

  

  顾名思义 body-parser 就是解析 body 中的数据的

  我们第一步先引入

var bodyParser = require('body-parser');

  第二,进行use 

app.use(bodyParser.json()); // 对 json 格式 进行解析
app.use(bodyParser.urlencoded({ extended: false })); // 对 form 表单进行解析( extended:false 指的是简单进行解析,没有深度解析)

  至于 extended 属性的具体含义 请参考如下文章

  https://www.cnblogs.com/lianer/p/5178693.html

  然后开始定义一个路由( 在routes里面新建的一个js文件 的部分代码 )

  

  在此之前我们得 

cnpm multiparty --save

  然后才能用这个代码

  首先了解一下 multiparty 

  

  这些都有点抽象,简单的来说,我们只需要解析 req 就行了,就需要我们这个

  首先 生成一个 multiparty 的 form ( 前端是由 formdata 传的文件 )

  并对form的属性进行设置,当然这里可以直接初始化的时候就设置

1       /* 生成multiparty对象,并配置上传目标路径 */
2       let form = new multiparty.Form();
3       // 设置编码
4       form.encoding = 'utf-8';
5       // 设置文件存储路径,以当前编辑的文件为相对路径
6       form.uploadDir = './images';
7       // 设置文件大小限制
8       // form.maxFilesSize = 1 * 1024 * 1024;    

  初始化就设置的话 就是这样,通过 键值对 这样设置

  

  然后进行对 "传入"  form  进行处理( 解析 )

 1 // callback 有三个参数 第一个是错误信息   
 2 // 第二个是 fields 指的是 form表单 中的多个 input
 3 // 第三个是 传入form中的 文件   
 4 form.parse(req, function (err, fields, files) {
 5 
 6         try {
 7 
 8         ...  // 对上传的文件进行重新命名( 推荐 随机数生成名命方法 )
 9 
10         } catch (err) {
11 
12                 ...  // 主要是对错误的处理 一般res.send( "error!" )
13     
14 
15         };
16 
17       })    

  第一个应该不用解释 就是错误信息

  第二个 简单来说一下 

    这个是我前端写的代码 我没有用表单,只是通过一个method方法添加到了formdata里面

    

    这个时候 fields 应该是什么都没有但有 file 的信息

    

    如果我是按照正常方法用表单提交如果是这样的话

    

    

    然后 后台的 console

    

     ( 这里指的应该是 type= text 有 name 属性的  )

    再比如前面加了 checkbox fields 增加

    

  第三个就是 files 前面form里面的 file 如果有名字 不重名的话就是一个数组

  解释得差不多了 这个代码应该就看得懂了

 1   form.parse(req, function (err, fields, files) {
 2         try {
 3         console.log(files)
 4         console.log(files.pic[0])
 5         console.log(fields)
 6           let inputFile = files.pic[0];
 7           let newPath = form.uploadDir + "/" + inputFile.originalFilename;
 8           // 同步重命名文件名 fs.renameSync(oldPath, newPath)
 9         //oldPath  不得作更改,使用默认上传路径就好
10           fs.renameSync(inputFile.path, newPath);
11           res.send({ data: "上传成功!" });
12         } catch (err) {
13           console.log(err);
14           res.send({ err: "上传失败!" });
15         };

  简单解释一下 fs 这个是express的一个组件,就是对文件操作的组件,这里用了 renameSync 方法 对后台自己弄的名字 改了一下

  

总结

  express 的上传太简单了吧

  Spring 可以搞死我

Let it roll
原文地址:https://www.cnblogs.com/WaterMealone/p/14400383.html