我正在开发一个 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...等进行编码或压缩,但在请求标头中找不到任何有用的信息。