Я пытаюсь прочитать файл и вычислить хэш SHA-256.Код прекрасно работает на localhost (Chrome и Safari).
Как только я загружу страницу на веб-сервер, я получу следующую ошибку в Google Chrome:
Uncaught TypeError: Невозможно прочитать свойство 'digest' из неопределенного файла в FileReader.reader.onload (hashDocument.js: 40)
Однако веб-страница отлично работает в Safari, а также на устройствах Android.
function convertStringToArrayBufferView(str)
{
var bytes = new Uint8Array(str.length);
for (var iii = 0; iii < str.length; iii++)
{
bytes[iii] = str.charCodeAt(iii);
}
return bytes;
}
function convertArrayBufferToHexaDecimal(buffer)
{
var data_view = new DataView(buffer);
var iii, len, hex = '', c;
for(iii = 0, len = data_view.byteLength; iii < len; iii += 1)
{
c = data_view.getUint8(iii).toString(16);
if(c.length < 2)
{
c = '0' + c;
}
hex += c;
}
return hex;
}
function hashIt() {
var nBytes = 0,
oFiles = document.getElementById("documentIn").files,
nFiles = oFiles.length;
for (var nFileId = 0; nFileId < nFiles; nFileId++) {
//console.log(oFiles[nFileId]);
var reader = new FileReader();
reader.onload = function(e) {
var text = reader.result;
var promise = crypto.subtle.digest({name: "SHA-256"}, convertStringToArrayBufferView(text));
promise.then(function(result){
var hashValue = convertArrayBufferToHexaDecimal(result);
// update input field
console.log("hashValue");
$("#documentHash").val(hashValue);
});
};
reader.readAsText(oFiles[nFileId]);
nBytes += oFiles[nFileId].size;
}
}