【发布时间】:2016-09-17 17:45:32
【问题描述】:
我要做什么
从浏览器上传一个二进制文件(在本例中为 .docx)并将其保存在服务器上。在服务器上使用 NodeJs/ExpressJS。
问题
我可以成功地将文本文件 (.json/.txt/.csv) 从客户端传递到服务器并成功保存,但是我似乎无法为二进制文件执行此操作。我要么得到“没有从文本到二进制的转换”错误,其中没有数据的损坏文件,要么是内部错误。
客户端
输入上传后,我调用
fRead.readAsArrayBuffer(fName);
$.ajax 调用是
$.ajax({
url: url,
type: 'POST',
data: obj, //the obj is the e.target.result from FileReader
contentType: 'application/octet-stream',
dataType: 'binary',
success: function (data) {
cbFn(data.msg);
},
error: function (xhr, status, error) {
alert("error " + status + " " + error);
}
});
服务器端
在服务器端
fs.writeFile(saveFile, req.body, 'binary', (err) => {
if (err) throw err;
console.log('file saved to ' + saveFile);
});
现在在服务器端,上面的代码虽然保存了文件(已损坏,没有数据),但会引发“没有从文本转换为二进制”错误。如果我把它改成
fs.writeFile(saveFile, Buffer.from(req.body), 'binary', (err) => {
if (err) throw err;
console.log('file saved to ' + saveFile);
});
我只是收到一个内部错误。
此时我不知道我的错误在哪里——是我在 $.ajax 调用中使用了错误的编码类型吗?或者我在 fs.writeFile 中的选项是错误的,或者我根本不应该使用 fs.writeFile 和其他东西?我觉得有这么多的排列,所以我可以使用一点帮助。
同样令人惊讶的是,很难找到适合这种情况的在线文章 - 我只是想上传一个二进制文件并保存它!
【问题讨论】: