Javascript,从输入文件中读取并使用XMLHttpRequest上传
Javascript, read from input file and upload with XMLHttpRequest
对不起,我的英语不好。我需要上传我的文件(.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);
文件上传OK。但是当我下载这个文件时,这个文件已经损坏了…编码和大小已更改
我试着像这样设置不同的头:
xhr.setRequestHeader("Content-Type", "charset=windows-1251");
.............
xhr.setRequestHeader("Content-Type", "charset=utf-8");
等等……但一切都没有改变……
我可以上传我的文件没有ajax,但我需要保存这个文件本地…操作后从变量上传。
简而言之:我有一个Base64编码的字符串,像这样:
0J/RgNC40LLQtdGCINC80LjRgCE=
嗯,我知道这个字符串是文件"SecretFile.exe"的来源。我想解码和上传这个文件使用javascript。标准窗口。解码后的字符串不等于原始文件源。如何正确解码这个文件,在FileReader中使用Base64编码。
谢谢。
您不必将文件读取为数据字符串,然后将其转换为Blob
。任何File
对象(例如您从<input type="file" />
元素获得的对象)也将是Blob
,因此您可以直接将其传递给fd.append
。
如果您需要在上传之前操作File
对象,您应该使用FileReader
的readAsArrayBuffer
方法,它为您提供了一个可以直接操作的ArrayBuffer
,然后在上传之前简单地使用new Blob([ arrayBuffer ])
创建一个blob。
相关文章:
- XMLHttpRequest未返回值-状态202
- XMLHttpRequest在移动设备上的chrome上不起作用
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- 检查xmlhttprequest问题的消息
- 主线程上的同步XMLHttpRequest已弃用
- 如何定期发出xmlhttprequest
- javascript第三个XMLHttpRequest被拒绝.但前两个是允许的
- 上传带有XMLHttprequest的文件-多部分/表单数据中缺少边界
- 对象#<XMLHttpRequest>没有方法'完成'
- 在XMLHttpRequest之后重新初始化jQuery
- 如何将GreaseMonkey中的XMLHttpRequest延迟到目标页面加载完成
- Javascript XMLHttpRequest——只有第一个POST请求有效
- XMLHttpRequest - difference between Chrome & Firefox
- IE上的新XMLHttpRequest()出现JS Ajax未指定错误
- 非常简单的XMLHttpRequest不起作用
- 如何使用XMLHttpRequest下载文件
- XMLHttpRequest在$.ajax工作的地方给出了CORS错误
- XMLHttpRequest.open()AJAX中的参数url
- XMLHTTPRequest脚本中没有internet连接和超时
- 为什么当async标志设置为false时,xmlhttprequest中的代码可以工作,而当它设置为true时却不能工作