gpt4 book ai didi

node.js - 文件读取器:readAsArrayBuffer() 与 readAsBinaryString()

转载 作者:行者123 更新时间:2023-12-03 12:10:21 26 4
gpt4 key购买 nike

我正在使用 reader.readAsArrayBuffer() 将文件发送到 node.js,以便我可以将其保存在/public 文件夹中。

reader.readAsArrayBuffer(event.currentTarget.files[0])

读取完成后,它会调用 Meteor.method()
            reader.addEventListener("loadend", function(evt){

Meteor.call("saveFile", reader.result)

})

meteor 方法接收一个文件并将其保存到我的公共(public)/文件夹中。
      saveFile:function(file){

var fs = Npm.require("fs")

fs.writeFile('../../../../../public/logo/jow.png', file, {encoding:"binary"}, function (err) {

console.log(err)
console.log("file saved")

});

}

但是,问题是我从来没有正确编码,当在/public/logo/jow.png 打开文件时,我收到以下消息:
jow.png can not be read, it may be damaged.

但是当我将 readAsArrayBuffer() 更改为 readAsBinaryString() 时,它按预期工作,我可以打开图像。

有任何想法吗?

最佳答案

是因为readAsArrayBuffer以二进制数据(blob)发送信息。
如果您在 nodejs Buffers and character encodings 中查看 de 文档binary encoding 是 latin1 的别名编码。
我不知道 meteor ,但如果 fileBuffer您可以按原样发送。
示例:

<body>
<input type="file" />
<button onclick="sendFile();">sendFile</button>
<script>
const sendFile = async () => {
const reader = new FileReader();
const file = document.querySelector('input[type=file]').files[0];

reader.onloadend = function () {
var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.open("POST", 'http:/localhost:1234/', true);
xmlHttpRequest.setRequestHeader("Content-Type", file.type);
xmlHttpRequest.send(reader.result);
}

reader.readAsArrayBuffer(file);
};
</script>
</body>
const http = require("http");
const fs = require("fs");

http.createServer((req, res) => {
if (req.method === "OPTIONS") {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', '*');
res.writeHead(200, { });
res.end();
return;
}

if (req.method === "POST") {
const data = [];
req.on('data', chunk => {
data.push(chunk);
});
req.on('end', () => {
fs.writeFileSync(__dirname + "/file.png", Buffer.concat(data));
res.writeHead(200, { });
res.end();
});
return;
}
}).listen(1234);
我发送一个PNG文件并打开它有任何问题。

关于node.js - 文件读取器:readAsArrayBuffer() 与 readAsBinaryString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26876035/

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