我正在处理嵌入式设备的网页。为了在网页和此设备的应用程序之间交换数据,我使用 xmlhttprequest。
现在我寻找一种允许客户端将二进制文件(以更新该设备的固件)上传到服务器的方法。
一个很大的限制:它需要在 IE8 中工作(跨浏览器解决方案是理想的,但必须首先在 IE8 上工作......)
详细说明我必须做什么:
- 使用
<input type='file'>
选择客户端计算机上的文件 - 将文件(使用 xmlhttprequest?)发送到服务器
- 服务器将重新组装文件以及它需要对它做的任何事情......
我能够在 chrome 中从客户端获取到服务器的二进制文件,但在 IE8 中,我的方法不兼容。
相关的html文件:
<input id="uploadFile" type="file" />
在 javascript 中,我尝试了不同的方式来触发具有输入文件类型的事件
// does not work in IE8 (get an Obj doesnt support this property or method)
document.querySelector('input[type="file"]').addEventListener("change"),function(e)...
// tried with jQuery, does not work in IE8(I may not using it correctly...)
$('upload').addEvent('change', function(e)....
$('upload').change(function(e)....
所以我的第一个问题是:如何在 IE8 中使用输入类型文件执行 onChange 事件?
还有我在 chrome 中使用的方法(在此页面上找到:http: //www.html5rocks.com/en/tutorials/file/xhr2/)但这不适用于 IE8:
function upload(blobOrFile) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/server', true);
xhr.onload = function(e) { ... };
xhr.send(blobOrFile);
}
document.querySelector('input[type="file"]').addEventListener('change', function(e) {
var blob = this.files[0];
const BYTES_PER_CHUNK = 1024 * 1024; // 1MB chunk sizes.
const SIZE = blob.size;
var start = 0;
var end = BYTES_PER_CHUNK;
while(start < SIZE) {
upload(blob.slice(start, end));
start = end;
end = start + BYTES_PER_CHUNK;
}
}, false);
})();
因为document.querySelector在IE8中产生了错误,不知道这段代码的其余部分在IE8中是否可以工作(我希望它可以工作!)
任何帮助和建议将不胜感激!!!