對不起,我的英語。我需要上傳我的輸入文件中選擇文件(.exe):Javascript,從輸入文件讀取並使用XMLHttpRequest上傳
<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,但我需要持有這個文件localy ...並在操作後從變量上傳它。
簡而言之:
我在Base64編碼的像這樣的字符串:
0J/RgNC40LLQtdGCINC80LjRgCE=
嗯,我知道在這個字符串文件 「SecretFile.exe」 的來源。 我想用javascript解碼並上傳這個文件。使用標準window.atob解碼的字符串不等於原始文件源。如何真正解碼此文件,由FileReader中的Base64編碼。
謝謝。
上傳文件就OK了嗎?你如何將它存儲在服務器上,你如何下載它(你沒有顯示該代碼,但你說它是**下載**破壞文件) –
'size changed' - 多少?什麼是原始尺寸,改變後的尺寸是多少 - 魔鬼在細節中 –
不要將答案編輯成問題。請閱讀[如何接受答案的工作?](http://meta.stackoverflow.com/questions/5234/how-does-accepting-an-answer-work) – Quentin