3

我正在处理嵌入式设备的网页。为了在网页和此设备的应用程序之间交换数据,我使用 xmlhttprequest。

现在我寻找一种允许客户端将二进制文件(以更新该设备的固件)上传到服务器的方法。

一个很大的限制:它需要在 IE8 中工作(跨浏览器解决方案是理想的,但必须首先在 IE8 上工作......)

详细说明我必须做什么:

  1. 使用<input type='file'>选择客户端计算机上的文件
  2. 将文件(使用 xmlhttprequest?)发送到服务器
  3. 服务器将重新组装文件以及它需要对它做的任何事情......

我能够在 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中是否可以工作(我希望它可以工作!)

任何帮助和建议将不胜感激!!!

4

0 回答 0