zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯VIP基础练习 矩形面积交
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    核心思想:想清楚自己创业的目的(如果你没有自信提供一种更好的产品或服务,那就别做了,比如IM 电商 搜索)
    在Linux中如何利用backtrace信息解决问题
  • 原文地址:https://www.cnblogs.com/WaterMealone/p/14400383.html
Copyright © 2011-2022 走看看