如何在实际上传之前分析要上传的文件?

时间:2011-12-04 01:29:26

标签: javascript scalability sha

我们目前正在筹划一个人们可以上传电影的网站。在观看YouTube时,您会注意到某些电影上传了两次或更多次(由不同的用户)。为了扩展我们的应用程序,我们正在考虑以下想法:

  1. 用户选择要上传的电影文件
  2. JavaScript会在上传之前从文件中获取SHA256哈希值(它比MD5哈希值更准确)
  3. 网站将检查哈希是否已存在
  4. 如果哈希不存在,则上传文件
  5. 如果哈希确实存在,则会提示消息,或者将创建对服务器上现有版本的引用。这没有上传视频。
  6. 问:我们如何使用JavaScript分析文件以获取SHA256哈希值,SHA256是否足够好,还是应该考虑SHA512(或其他算法)?

3 个答案:

答案 0 :(得分:6)

使用HTML5文件API读取文件:http://www.html5rocks.com/en/tutorials/file/dndfiles。这是一个用于计算SHA-256的JS代码:http://www.webtoolkit.info/javascript-sha256.html

我必须补充一点,我从未尝试过,但似乎有可能。 Alxandr是对的,大型视频需要很长时间,但您可以尝试使用WebWorker API以免冻结浏览器:http://html5rocks.com/en/tutorials/workers/basics

答案 1 :(得分:1)

暂时放置文件,如果问题实际上是否可以在JavaScript中获得SHA-256哈希,答案是肯定的。您可以自己重新设置(不好主意)或使用像Stanford JS Crypto library这样的库(好主意)。

File API而言,它是在每个主要桌面浏览器的最新版本以及最新的Android浏览器发布中实现的。 iOS不受支持,因为它没有真正的文件系统。查看caniuse.com了解最新统计信息。

答案 2 :(得分:-1)

简单回答,你不能。也就是说,如果你想至少支持所有浏览器。我认为Chrome和FireFox都支持在客户端上读取文件,并且IE在ActiveX控件的帮助下支持它,但是为了获得适用于所有浏览器的解决方案,您必须使用Flash或Silverlight等插件。此外,在进行视频幅度(大+文件)的文件上传时,我认为无论如何都要从一开始就使用flash或者喜欢这个,但这只是我的意见。