This question already has answers here:
Creating a Blob from a base64 string in JavaScript
(12个答案)
3年前关闭。
对不起我的英语。我需要上传由输入文件选择的文件(.exe):
像这样阅读(Javascript):
现在,我有了变量“ myfile”,例如:
在base64部分中,我有选择的源文件。当我尝试上传文件时,此文件的编码和大小已更改,文件已损坏。怎么了?
上传代码:
文件上传确定。但是,当我下载此文件时,此文件已损坏...编码和大小已更改。
我正在尝试设置不同的标头,如下所示:
等等......
但是什么都没有改变...
我可以不使用ajax上传文件,但是我需要本地保存此文件...并在操作后从变量上传文件。
简而言之:
我有一个在Base64中编码的字符串,如下所示:
好吧,我知道此字符串是文件“ SecretFile.exe”的来源。
我想使用javascript解码并上传此文件。使用standart window.atob时,解码后的字符串不等于原始文件源。由FileReader中的Base64编码的此文件的真实解码方式。
谢谢。
(12个答案)
3年前关闭。
对不起我的英语。我需要上传由输入文件选择的文件(.exe):
<input type="file" id="myfile">
像这样阅读(Javascript):
var myfile='';
var input = document.getElementById('myfile');
input.onchange = function(evt){
var tgt = evt.target || window.event.srcElement, files = tgt.files;
if (FileReader && files && files.length) {
var fr = new FileReader();
fr.onload = function(){
myfile = fr.result;
}
fr.readAsDataURL(files[0]);
}
}
现在,我有了变量“ myfile”,例如:
"data:application/msdownload;base64,0J/RgNC40LLQtdGCINC80LjRgCE= .... etc."
在base64部分中,我有选择的源文件。当我尝试上传文件时,此文件的编码和大小已更改,文件已损坏。怎么了?
上传代码:
var fd = new FormData();
var b = new Blob([atob(decodeURIComponent((myfile).split(',')[1]))],{type: 'application/msdownload'});
fd.append('file', b, "myfile.exe");
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://myserver/");
xhr.send(fd);
文件上传确定。但是,当我下载此文件时,此文件已损坏...编码和大小已更改。
我正在尝试设置不同的标头,如下所示:
xhr.setRequestHeader("Content-Type", "charset=windows-1251");
.............
xhr.setRequestHeader("Content-Type", "charset=utf-8");
等等......
但是什么都没有改变...
我可以不使用ajax上传文件,但是我需要本地保存此文件...并在操作后从变量上传文件。
简而言之:
我有一个在Base64中编码的字符串,如下所示:
0J/RgNC40LLQtdGCINC80LjRgCE=
好吧,我知道此字符串是文件“ SecretFile.exe”的来源。
我想使用javascript解码并上传此文件。使用standart window.atob时,解码后的字符串不等于原始文件源。由FileReader中的Base64编码的此文件的真实解码方式。
谢谢。
最佳答案
您不必将文件读取为数据字符串,然后将其转换为Blob
。任何File
对象(例如从<input type="file" />
元素获得的对象)也已经是Blob
,因此您可以直接将其传递给fd.append
。
如果需要在上载前处理File
对象,则应改用FileReader
的readAsArrayBuffer
方法,该方法为您提供一个可以直接操作的ArrayBuffer
,然后只需使用上传之前。
关于javascript - Javascript,从输入文件中读取并使用XMLHttpRequest上传,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39735945/