gpt4 book ai didi

node.js - Node JS POST 多部分/表单数据请求

转载 作者:搜寻专家 更新时间:2023-11-01 00:09:39 29 4
gpt4 key购买 nike

我想使用 multipart/form-data 内容类型通过 http 模块从 Node JS 发送文件。二进制编码的问题。当我尝试发送简单的文本文件时没问题:

url: 'some-site.com',
method: 'POST',
headers:
{
'content-type': 'multipart/form-data; boundary=-----BNDRY',
'content-length': 128
},
body: '-------BNDRY\r\ncontent-type: text/plain\r\ncontent-disposition: form-data; name="file"; filename="file.txt"\r\n\r\ntest\r\n-------BNDRY--'
}

但是,当我尝试在文件读取后发送类似 JPG 的内容(例如通过 FS 模块)并将 Buffer 转换为请求正文的字符串时,它失败了。我尝试了 Buffer.toString(encoding) 方法和 content-transfer-encoding: encoding header 的不同组合,但没有成功。出于某种原因,base64 编码也不起作用,我已经使用 connect bodyParser 对其进行了测试,似乎它并不关心正文中的 content-transfer-encoding: base64 header - 内容仍然以未解码的 base64 字符串形式出现。

而且我不想使用像 node-formidable 或 express 这样的外部模块来解决我的问题。

谢谢。

最佳答案

您可以简单地将缓冲区保存到文件而无需编码:

fs.writeFile(fileBuffer)

或者您可以使用这样的包来完全处理这种情况:使用这个包:https://www.npmjs.com/package/multi-part-form-data-upload

用法:

// Express
const uploader = require('multi-part-form-data-upload')(options /* config options */ );
const app = express();

app.post('/uploads',uploader, (req, res) => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ body: req.body }));
});

// OR Http

const http = require('http');
const uploader = require('multi-part-form-data-upload')(options /* config options */ );

const server = http.createServer(async (req, res) => {
if (req.url === '/uploads' && req.method.toLowerCase() === 'post') {
await uploader(req, res, () => {
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ body: req.body }));
});
return;
}
}

关于node.js - Node JS POST 多部分/表单数据请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17771130/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com