我试图使用此JS-Snippet上传二进制文件(PDF特定):
function uploadFile() {
var reader = new FileReader();
var file = document.getElementById('uploadInput').files[0];
console.log(file.size);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'custom?id=upload');
xhr.setRequestHeader("Content-Type", "application/pdf");
xhr.overrideMimeType('application/pdf');
reader.onload = function(evt) {
xhr.send(evt.target.result);
};
reader.readAsBinaryString(file);
}
在服务器端(Java)上,我收到请求并将文件写入磁盘
但是,在打开PDF时,我没有达到预期的~3MB,而是大约4MB,因为我只有空白页。
传入请求的标题还指定了大约4MB的内容长度,所以我相当肯定,它是客户端的东西,这导致了麻烦。
发送纯文本文件完全没有问题,它们完全按照预期到达
由于编写JavaScript和在网络中工作不在我的日常工作领域,因此很有可能我做了一些基本错误的事情。
答案 0 :(得分:2)
我怀疑你可以尝试两件事:
希望这对你有所帮助,祝你好运!
答案 1 :(得分:0)
我找到了解决方案:在发送数据之前使用Base64显式编码数据,并在接收端对其进行适当解码。
function uploadFile() {
var reader = new FileReader();
var file = document.getElementById('uploadInput').files[0];
console.log(file.size);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'custom?id=upload');
xhr.setRequestHeader("Content-Type", "text/plain; charset=x-user-defined");
xhr.overrideMimeType('text/plain; charset=x-user-defined');
reader.onload = function(evt) {
var encoded = window.btoa(evt.target.result);
xhr.send(encoded);
};
reader.readAsBinaryString(file);
}
我写这篇文章是为了让任何遇到同样问题的人知道我的解决方案。