組み込みデバイスの Web ページに取り組んでいます。このデバイスの Web ページとアプリケーションの間でデータを交換するには、xmlhttprequest を使用します。
ここで、クライアントが (そのデバイスのファームウェアを更新するために) バイナリをサーバーにアップロードできるようにする方法を探します。
1 つの大きな制限: 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 イベントを実行する方法は?
また、私がクロムで使用していた方法(このページにあります: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 で機能するかどうかはわかりません (機能することを願っています!)
どんな助けや提案も大歓迎です!!!