我很努力地重新找到想法/代碼here(基本前提是通過查看數據的前幾個字節來計算文件類型)。FileReader和回調
我得到了我想做的事情的裸骨 - 請參閱JSFIDDLE。
繼承人我的代碼:
function readTheFiles(file){
var fileReader = new FileReader();
fileReader.onloadend = function(e) {
var fileHeader = new Uint8Array(e.target.result).subarray(0, 4);
var header = "";
for (var q = 0; q < fileHeader.length; q++) {
header += fileHeader[q].toString(16);
}
alert(header);
return header;
};
fileReader.readAsArrayBuffer(file);
}
$("#input-id").on('change', function(event) {
var files = event.target.files;
var i = 0;
for (var i = 0, file; file = files[i]; i++) {
var headString = readTheFiles(file);
alert(headString);
}
});
。據我讀(example 1,example 2)我敢肯定,問題在於要求在readTheFiles回調功能 - 大概代碼調用警報( headString)在文件加載之前(因此爲什麼readTheFiles函數給出了預期的結果)。
我很想了解校長,而不是隻是得到一個解決方案,所以任何指針/建議/援助將受到感謝。
非常感謝
'file.type'應該已經告訴你的文件類型,在你的機器上錯了嗎?另外,我會認爲readAsBinaryString的結果會比較容易。 – dandavis
你不能那樣做。閱讀http://blog.slaks.net/2015-01-04/async-method-patterns/ – SLaks
@dandavis不,它只是告訴你什麼類型的文件擴展名相關(在Windows上無論如何,我已經在擴展無關緊要的系統上嘗試過了)。 – Musa