需求背景
最近有个需求是这样的~~~公司某个平台有上传素材功能,,很多时候会上传重复素材,这样一来就带来不少问题,比较严重的就是浪费存储空间以及使素材库过于臃肿不利于查找,需求很自然的提了出来,在上传素材时判断该素材是否已经在数据库中,即使名字不一样。
恰好看到七牛云公布的哈希算法,感觉尚可,那就拿来一用,各部分功能已添加注释
代码
// 计算文件的eTag,参数为buffer或者readableStream或者文件路径
function getEtag(buffer,callback){
// 判断传入的参数是buffer还是stream还是filepath
var mode = 'buffer'; //一开始数据类型默认为buffer
if(typeof buffer === 'string'){
//如果是路径名,创建流
buffer = require('fs').createReadStream(buffer);
mode='stream';
}else if(buffer instanceof require('stream')){
//或者如果传入文件是stream的实例,也
mode='stream';
}
//程序执行到这里,buffer不是Buffer对象就是Stream对象
// sha1算法,对content进行数字签名
var sha1 = function(content){
var crypto = require('crypto');
var