У меня есть загрузчик HTML-файла с функцией onChange
, который находит SHA256-хеш файла, который я загрузил.Моя проблема в том, что если я выбираю новый файл, он, похоже, «наращивает» содержимое буфера (таким образом, возвращая неправильный хеш каждого загруженного файла, кроме первого).Вот пример того, что происходит.Каждый файл выбирается в следующем порядке:
one.txt returns 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b (correct)
two.txt returns 1e5e6cdb24208b723fa1631b107613cb1084c202a3b48fc6e3ddf9d458adf5ea
one.txt returns 2ebc9be2494f13b2ec93f578bea1002be847c7fad8a5bf27ddd674547121a284
Я попытался перевести буфер в состояние и использовать его для поиска хеша.Надежда состоит в том, что каждый раз, когда DOM перезагружается (вызывая функцию onChange()
), я получаю новый буфер.Либо я делаю это неправильно, либо это не работает.Вот полный код, есть мысли?
import React, { Component } from "react";
const crypto = require("crypto");
const hash = crypto.createHash("sha256");
class SearchPage extends Component {
constructor(props) {
super(props);
this.state = {
hashOutput: "",
files: null,
};
}
onChange(e) {
let files = e.target.files;
let reader = new FileReader();
this.setState({ fileName: files[0].name });
this.setState({ files: files[0] }, () => {
reader.readAsArrayBuffer(this.state.files);
});
console.log(this.state.files);
reader.onload = e => {
hash.update(Buffer.from(e.target.result));
const hashOutput = hash.digest("hex");
this.setState({ hashOutput });
console.log(hashOutput);
};
}
render() {
return (
<div onSubmit={this.onFormSubmit}>
<input type="file" name="file" onChange={e => this.onChange(e)} />
</div>
);
}
}