8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在没有第三方库的情况下在 Node.js 中解析和保存多部分表单数据

Trax 2月前

20 0

我正在开发一个 Node.js 应用程序,需要解析并保存通过 HTTP 请求发送的多部分表单数据。我使用内置的 http 模块来处理请求,并且我已成功解析

我正在开发一个 Node.js 应用程序,需要解析和保存通过 HTTP 请求发送的多部分表单数据。我使用内置的 http 模块来处理请求,并且已经成功解析了多部分表单数据。但是,我在尝试本地保存文件时遇到了困难。以下是负责解析多部分表单数据并尝试保存文件的函数:

const fs = require('fs');

function parseMultipartFormData(req) {
  let body = req.body;
  const boundary = body.split(/\r?\n|\r/, 1)[0];
  body = body.split(boundary);
  body.shift();
  body.pop();
  let parsedData = {};

  for (let part of body) {
    part = part.trim();

    if (part.includes("filename")) {
      const fileRegex = /name="(.+)"; filename="(.+)"\r?\nContent-Type: (\w+\/\w+)(?:\r?\n)*([\s\S]*)/;
      const match = fileRegex.exec(part);
      if (match) {
        parsedData[match[1]] = {
          filename: match[2],
          contentType: match[3],
          contentData: match[4],
        };
      }

    } else {
      part = part.replace(/\r?\n|\r/g, "");
      const regex = /name="(.+)"(.+)/;
      const match = regex.exec(part);
      if (match) {
        parsedData[match[1]] = match[2];
      }
    }
  }

  // Write file if productImage exists
  if (parsedData.productImage && parsedData.productImage.contentData) {
    const imageData = parsedData.productImage.contentData;
    const filename = parsedData.productImage.filename;

    fs.writeFile(filename, imageData, "binary", (err) => {
      if (err) {
        console.error('Error saving image:', err);
      } else {
        console.log('Image saved successfully.');
      }
    });
  }

  return parsedData;
}

特意 避免使用 multer 或任何类似的第三方库来完成这项任务。

我注意到文件没有正确保存,我不确定如何正确处理文件数据。有人能指导如何在这种情况下正确处理和保存文件吗?

此外,解析后的表单数据处理后如下所示:


{
  "productName": "Carolyn Jordan",
  "productDescription": "Eligendi enim conseq",
  "productPrice": "82",
  "productImage": {
    "filename": "logoWhiteBgSocial.png",
    "contentType": "image/png",
    "contentData": "PNG  IHDRLL pHYssRGBgAMAa8zIDATxuTW=vG@w ... (truncated)"
  }
}

我试图查看数据是否使用 gzip、defalte...等进行编码或压缩,但在请求标头中找不到任何有用的信息。

帖子版权声明 1、本帖标题:如何在没有第三方库的情况下在 Node.js 中解析和保存多部分表单数据
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Trax在本站《file》版块原创发布, 转载请注明出处!
最新回复 (0)
返回
作者最近主题: