//由于计算文件HASH值用到了多种数据,因此在HYFileUploader系统范围内发生HASH冲突的可能性应该非常小,应该可以放心使用。
//获取文件的ID可以用任何算法来实现,只要保证做到同一文件的ID是相同的即可,获取的ID长度不要超过32字节
//
function getFileId (file)
{
//给浏览器授予一个唯一的ID用于区分不同的浏览器实例(不同机器或者相同机器不同厂家的浏览器)
var clientid = getCookie(“HUAYIUPLOAD”);
if (clientid == “”) {
//用一个随机值来做浏览器的ID,将作为文件HASH值的一部分
var rand = parseInt(Math.random() * 1000);
var t = (new Date()).getTime();
clientid =rand+‘T’+t;
setCookie(“HUAYIUPLOAD”,clientid,365);
}
var info = clientid;
if (file.lastModified)
info += file.lastModified;
if (file.name)
info += file.name;
if (file.size)
info += file.size;
//https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js
var fileid = md5(info);
return fileid;
}
笔者认为:不必通过读取文件的内容来计算 HASH 值,这样会非常慢的。如果确实需要实现 HTTP 秒传,可能得这么做,这样如果不同的人上传的文件内容一致,就可避免重复上传,直接返回结果即可。
之所以给浏览器赋予一个 ID,这样可以进一步避免别的计算机的同名同尺寸文件的 HASH 值冲突。
二、查询文件的 HASH 值
在文件上传支持,先通过文件的 HASH 值从上传服务器查询文件的上传进度信息,然后从上传进度位置开始上传,代码如下:
var fileObj = c
评论前必须登录!
注册