use-on-demand
Version:
76 lines • 3.49 kB
JavaScript
function get_CryptoJS() {
// @ts-ignore
return import('crypto-js');
}
function get_Md5_Helper() {
return import('../encrypt/MD5_Helper');
}
var xX_FileMd5_Helper = /** @class */ (function () {
function xX_FileMd5_Helper() {
}
xX_FileMd5_Helper.downloadAndCreateHash = function (remoteUrl) {
// const hashResultDiv = document.getElementById('hash-result');
var _this = this;
return fetch(remoteUrl)
.then(function (response) {
return response.blob();
})
.then(function (blob) {
return _this.calculateMD5____CryptoJS_ArrayBuffer_Correct(blob);
})
.then(function (hash) {
// hashResultDiv.innerHTML = hash;
console.log("Hash of the file is: " + hash);
return hash;
})
.catch(function (err) {
// hashResultDiv.innerHTML = err;
console.error(err);
return Promise.reject(err);
});
};
// TIP————————————————————————————————————————————————————————————————————————
/**
* 这种方式,可以正常运行。
* 1.之前,我曾嫌弃【crypto-js】的体积过大。
* 2。后来发现,【网络传输】中的各种【噪音】,如果自己手动处理,过于复杂。
*/
xX_FileMd5_Helper.calculateMD5____CryptoJS_ArrayBuffer_Correct = function (blob) {
return new Promise(function (resolve) {
var reader = new FileReader();
reader.readAsArrayBuffer(blob); // TIP 以【ArrayBuffer】读取
reader.onloadend = function () {
get_CryptoJS().then(function (CryptoJS) {
var wordArray = CryptoJS.lib.WordArray.create(reader.result), hash = CryptoJS.MD5(wordArray).toString();
resolve(hash);
});
};
});
};
/**
* 这种方式,出现了【MD5计算不准】的问题。
* 1.可能和【返回文件】的【格式处理】有关。
* 1.用【String】进行处理时,可能被【网络传输】层,加入了【噪音】。
* 2.经过检验,【MD5_Helper】本身对【纯字符串】处理,是计算正确的。
* 1.但是,只有对【纯字符串】,是处理正确的。
* 2.无法处理【网络传输】的【噪音】问题。
*/
xX_FileMd5_Helper.calculateMD5_CustomMD5_String_Error = function (blob) {
return new Promise(function (resolve) {
var reader = new FileReader();
reader.readAsText(blob); // TIP 以【String】读取
reader.onloadend = function () {
var res = reader.result;
get_Md5_Helper().then(function (_a) {
var xX_MD5_Helper = _a.xX_MD5_Helper;
var hash = xX_MD5_Helper.hash(res); // WARN 将返回的结果,做Hash化。
// console.log('读取到的结果为', res, 'hash为', hash /*'用于演示的DemoHash为', demoHash*/);
resolve(hash);
});
};
});
};
return xX_FileMd5_Helper;
}());
export { xX_FileMd5_Helper };
//# sourceMappingURL=FileMd5_Helper.js.map