美文网首页
记一次node服务端文件校验历程_request.files读取

记一次node服务端文件校验历程_request.files读取

作者: shu2man | 来源:发表于2019-10-24 19:50 被阅读0次

出于某种不可描述的需求,需要在服务端校验上传的文件类型和大小,由于之前没接触过node,就开始了愉快的踩坑之旅。

坑一:request.on()事件不执行

因为接收到了request请求,首先希望通过request的on事件监听data事件,达到统计数据大小的目,先看代码:

router.post("/upload", async (req, res) => {
      logger.info("Request Comming In", req.files.length);
      req.on('data', (chunk) => {
        dataSize += chunk.length;
        logger.info("${chunk.length} bytes of data comming in, ${dataSize} bytes has received");
      });
      req.on("end", () => {
        logger.info("${dataSize} bytes data received in total");
        res.sendStatus(200);
      });
});

然而测试发现,以上on事件完全没有执行,菜鸟表示不懂,欢迎大佬指教;

坑二:formidable.on()事件不执行

后来又百度到了formidable,于是就寄希望于它,当然,依旧踩坑了:

router.post("/upload", async (req, res) => {
      logger.info("Request Comming In", req.files.length);
      var form = new formidable.IncomingForm();
      form.on('file', (field, file) => {
// xxxx
      });
      form.on("field", (field, value) => {
// xxxx
      });
});

真的想不通,难不成这些事件被监听之前没有emit?菜鸟不懂,也不敢问,但记得formidable还有的个parse方法,再来一试。

坑三:formidable.parse()事件无数据

router.post("/upload", async (req, res) => {
      var form = new formidable.IncomingForm();
      form.parse(req, function (err, fields, files) {
        if (err)  res.sendStatus(500);
        logger.info("fields:\n", JSON.stringify(fields));
        logger.info("files:\n", JSON.stringify(files));
    } 
});

无奈,通过打印的日志发现,fields和files全是空的,我太难了。。。此处附上formidable的简单介绍:
https://www.cnblogs.com/Trr-984688199/p/6285958.html?utm_source=itdadao&utm_medium=referral
可是问题依旧是要解决的呀!

灵光一闪解决之道:request.files

我突然想到,之前通过JSON.stringify打印request的时候报错了,但同样的方法打印request.body是可以的,要是request里面存在file这样的字段了呢?随便一试,果然有request.files!打印,其结构如下
[{"fieldname":"my_file_name","originalname":"wo-tai-nan-le.jpg","encoding":"7bit","mimetype":"image/jpeg","buffer":{"type":"Buffer","data":[255,216,255....]}}]
参考files的数据结构,解决问题就不难了。

相关文章

  • 记一次node服务端文件校验历程_request.files读取

    出于某种不可描述的需求,需要在服务端校验上传的文件类型和大小,由于之前没接触过node,就开始了愉快的踩坑之旅。 ...

  • 文件上传之绕过

    文件上传校验方式 客户端JavaScript校验服务端校验①请求头中content-type字段校验②文件内容头校...

  • Node-核心模块(fs、path)

    一、核心模块fs 1、文件读取 使用 Node 中 提供的 文件操作API,读取指定 文件中的文本内容 Node ...

  • node读取本地文件中文乱码

    node读取本地文件 由于Node环境当中不支持GBK编码,此时读到的文件,英文可读取,但中文乱码 node.js...

  • node教程--回调函数

    node异步读取文件: node同步读取文件: 在 Node.js 中,异步式 I/O 是通过回调函数来实现的 f...

  • 初步认识node.js

    fs系统模块:读取文件: // node 读取文件const fs = require('fs');fs.read...

  • Node

    Node 检测Node是否安装成功 Node文件 自己搭建HTTP服务 创建http服务 监听端口 读取文件

  • 【Node.js】读取文件

    在node.js里,读取文件分为 同步读取 和 异步读取。 同步读取: fs.readFileSync() 异步读...

  • 局域网内通过Socket传输文件(Android&iOS

    实现步骤 读取设备当前连接的网络信息 服务端监听端口 客户端与服务端建立连接 发送文件/接收文件 读取设备的网络信...

  • 04.node内置模块之文件模块fs

    一. 读取文件夹 同步读取文件 异步读取文件夹 异步读取,回调函数后执行 在node中,错误的回调优先,回调函数第...

网友评论

      本文标题:记一次node服务端文件校验历程_request.files读取

      本文链接:https://www.haomeiwen.com/subject/tbpdvctx.html