• 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
  • 相关阅读:
    LTS版本的解析
    symfony中twig的模板过滤器
    symfony中twig的模板载入
    symfony中twig的流程控制if,for用法
    symfony中twig的模板变量与注释
    使用Symfony 2在三小时内开发一个寻人平台
    symfony在模板中生成url
    模板中引入其他的模板
    劳务派遣有新规章,劳务工有保障了|中山劳务派
    Symfony启动过程详细学习
  • 原文地址:https://www.cnblogs.com/WaterMealone/p/14400383.html
Copyright © 2020-2023  润新知