我正在使用CryptoJS创建上传文件的哈希值。但是,我上传的所有文件都产生相同的哈希值。我知道问题出在我的“ onFileChange”调用中,但是我不确定我在做什么错。任何帮助将不胜感激。
created_at
导出默认的connect()(FileSelectorComponent);
答案 0 :(得分:1)
您正在加载读取器之前计算哈希值。
哈希值“ d41d8cd98f00b204e9800998ecf8427e”是空字符串的MD5哈希值。
有行:
reader.onloadend = function () {
text = (reader.result);
}
表示text
变量将在读取器异步完成加载后分配结果。但是到那时,该功能的其余部分已经执行。
因此,您需要确保该过程在text
变量获得新值之后进行,例如:
reader.onloadend = function () {
text = (reader.result);
reader.readAsBinaryString(event.target.files[0]);
var hash = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(text));
console.log(hash.toString());
}
答案 1 :(得分:0)
// On file select (from the pop up)
onFileChange = event => {
var text = '';
// Update the state
this.setState({ selectedFile: event.target.files[0] });
console.log(event.target.files[0]);
var reader = new FileReader();
reader.onloadend = function () {
text = (reader.result);
var hash = CryptoJS.MD5(CryptoJS.enc.Latin1.parse(text));
console.log(hash.toString());
}
reader.readAsBinaryString(event.target.files[0]);
//console.log(text);
//console.log(hash.toString());
};
CryptoJS需要放置在回调函数中。它解决了我的问题。