我想将文件从一个服务器发送到另一个服务器。问题是我的第二个服务器(谁接收)不正确读取我的文件。通常我会将文件发送给API,但我会创建一个小服务器来进行自己的测试。
我的服务器(发件人):
首先我得到了我的文件与multer().single('file')
(我的文件只包含“你好”)
const formData = new FormData();
const file = new File(req.file.buffer, req.file.originalname, { type: req.file.mimetype })
formData.append("file", file);
let firstFile = null;
for (const [key, value] of formData.entries()) {
if (value instanceof File) {
firstFile = value;
break;
}
}
const uploadres = await fetch(url, {
method: "POST",
headers: {
"Authorization": "Bearer " + token,
"Content-type": "multipart/form-data"
},
body: firstFile
})
然后我这样读文件:
var body;
body = '';
req.on('data', function (chunk) {
body += chunk;
});
req.on('end', function () {
console.log(req.method + ' ' + req.url + ' HTTP/' + req.httpVersion);
for (prop in req.headers) {
console.log(toTitleCase(prop) + ': ' + req.headers[prop]);
}
if (body.length > 0) {
if (req.headers['content-type'] === 'application/x-www-form-urlencoded') {
body = decodeURIComponent(body)
}
console.log('\n' + body);
}
console.log('');
res.writeHead(200);
res.end();
});
我的服务器打印:“72101108108111”
我知道我的代码有问题,因为API接收到我的文件,但没有正常执行。
我想我的问题是从编码,但我不知道如何解决。
我已经尝试了很多事情,比如把我的文件换成另一个文件等等。但都没用
2条答案
按热度按时间hmmo2u0o1#
当你发送一个文件时,你应该尝试将你的请求编码为“multipart/form-data”
dpiehjr42#
它看起来像“72101108108111”是字符“Hello”的ASCII编码的十进制表示。
更新第二个代码段以将数据解析为二进制缓冲区而不是字符串可能会有所帮助。
将
body = '';
替换为let body = []
将
body += chunk
替换为body.push(chunk)
将
body = Buffer.concat(body)
添加到.on('end'
回调的第一行然后使用
.toString()
查看结果