我最近遇到了一个问题,涉及 FTP 上的大型二进制信号文件被丢弃损坏。随后,我们与 FTP 解决方案一起调查了使用基于 Web 的上传的选项,类似于您似乎正在寻找的那种处理方式。最强大的解决方案仍然是使用 rsync 实现和连续校验和。
也就是说,HTML5 API 中似乎直接缺少的选项是能够在块本身中发送块的哈希或校验和,以便透明地完成对数据 blob 已完整接收的验证。
您基本上应该可以通过对切片数据进行一些处理并将其与 blob 结合,然后再发送。
while( start < SIZE ) {
var chunk = blob.slice(start, end);
//var chunkHash = chunk.ComputeHash(); // e.g. CRC32 or Adler
//chunk = chunkHash + chunk
uploadFile(chunk);
start = end;
end = start + BYTES_PER_CHUNK;
}
在另一端,您提取前 n 个字节并计算其余部分的哈希值,然后将前 n 个字节与您的数据进行比较。
一些启发灵感的文章:
使用 html5 分块上传文件是一个好地方,我认为处理文件上传
如何快速有效地将文件块(html5 分块的结果)合并到一个文件中
最后,可能值得研究预先存在的库并进行一些“退出”测试以确定最佳性能。http://www.plupload.com/似乎有一些追随者(不附属且未经测试)。