Javascript 如何分析即将上载的文件';它真的上传了吗?

Javascript 如何分析即将上载的文件';它真的上传了吗?,javascript,scalability,sha,Javascript,Scalability,Sha,我们目前正在计划一个人们可以上传电影的网站。当浏览YouTube时,你会注意到一些电影被上传两次或更多次(由不同的用户)。为了扩展我们的应用程序,我们考虑以下想法: 用户选择要上载的电影文件 JavaScript将在上传之前从文件中获取SHA256散列(比MD5散列更准确) 网站将检查哈希是否已经存在 如果哈希不存在,将上载该文件 如果哈希确实存在,则会提示消息或创建对服务器上现有版本的引用。这是在没有上传视频的情况下完成的 Q:我们如何用JavaScript分析一个文件以获得Sh256哈希,

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

  • 用户选择要上载的电影文件
  • JavaScript将在上传之前从文件中获取SHA256散列(比MD5散列更准确)
  • 网站将检查哈希是否已经存在
  • 如果哈希不存在,将上载该文件
  • 如果哈希确实存在,则会提示消息或创建对服务器上现有版本的引用。这是在没有上传视频的情况下完成的

  • Q:我们如何用JavaScript分析一个文件以获得Sh256哈希,并且Sh256足够好,还是应该考虑Sh512(或者另一个算法)?< /P> < P>简单的答案,你不能。如果您希望至少支持所有浏览器,那么就是这样。我认为Chrome和FireFox都支持在客户机上读取文件,IE在ActiveX控件的帮助下也支持读取文件,但要获得一个在所有浏览器中都能工作的解决方案,你必须使用Flash或Silverlight之类的插件。另外,在上传视频大小(大+文件)的文件时,我认为从一开始就使用flash之类的东西是个好主意,但这只是我的观点。

    使用HTML5文件API读取文件:。下面是计算SHA-256的JS代码:


    我必须补充一点,我从未尝试过这个,但它似乎是可能的。Alxandr是对的,这对于大型视频来说需要很长时间,但是为了不冻结浏览器,您可以尝试使用WebWorker API:

    暂时把文件放在一边,如果问题是是否可以在JavaScript中获得SHA-256哈希,答案是肯定的。你可以自己重新实现这个(坏主意),也可以使用类似的库(好主意)


    就目前而言,它在每一款主流桌面浏览器的最新版本以及最新的Android浏览器中都得到了实现。iOS不受支持,因为它实际上没有文件系统。查看最新统计数据。

    上传电影可能需要很长时间,但同时上传同一电影的另一个版本也需要很多时间。我们肯定会运行一些基准测试。