//获取hash地址 hash (chunks) { return new Promise(resolve => { const spark = new MD5(); this._read(0,chunks,spark,resolve); }) }, //递归增量计算hash地址 _read(i,chunks,spark,resolve) { if (i >= chunks.length) { resolve(spark.end()); return ; } const blob = chunks[i]; const reader = new FileReader(); reader.onload = e => { const bytes = e.target.result; // 读取到的字节数 spark.append(bytes); this._read(i+1,chunks,spark,resolve); } reader.readAsArrayBuffer(blob); },这个是我计算hash地址,请改成你说的其他hash算法,避免数据变动不大哈希值重复的问题,还要附带前端js的下载方式
时间: 2024-03-20 21:42:29 浏览: 69
MD5.c.zip_hash_md5_md5 hash_md5_hash_woodennfx
可以使用SHA-256算法来代替MD5算法,以下是修改后的代码:
```javascript
// 获取hash地址
hash(chunks) {
return new Promise(resolve => {
const spark = new SHA256(); // 使用SHA-256算法
this._read(0, chunks, spark, resolve);
});
},
// 递归增量计算hash地址
_read(i, chunks, spark, resolve) {
if (i >= chunks.length) {
resolve(spark.end());
return;
}
const blob = chunks[i];
const reader = new FileReader();
reader.onload = e => {
const bytes = e.target.result; // 读取到的字节数
spark.append(bytes);
this._read(i + 1, chunks, spark, resolve);
};
reader.readAsArrayBuffer(blob);
}
```
需要注意的是,SHA-256算法生成的哈希值长度为64个字符,需要在后端存储时修改哈希值字段的长度,以便存储完整的哈希值。
对于前端JS的下载方式,可以使用Blob对象和URL.createObjectURL()方法来实现。以下是一个示例:
```javascript
// 下载文件
downloadFile(data, fileName) {
const blob = new Blob([data]);
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = fileName;
a.click();
URL.revokeObjectURL(url);
}
```
这个方法会将文件数据和文件名作为参数,创建一个Blob对象,然后使用URL.createObjectURL()方法生成一个URL,赋值给a标签的href属性,最后触发a标签的click事件来下载文件。下载完成后,需要调用URL.revokeObjectURL()方法释放URL对象。
阅读全文