【问题标题】:How can I analyze a file about to be uploaded before it's actually uploaded?如何在实际上传之前分析即将上传的文件?
【发布时间】:2011-12-04 01:29:26
【问题描述】:

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

  1. 用户选择要上传的电影文件
  2. JavaScript 会在文件上传之前从文件中获取 SHA256 哈希(它比 MD5 哈希更准确)
  3. 网站会检查哈希是否已经存在
  4. 如果哈希值不存在,将上传文件
  5. 如果哈希值确实存在,则会提示一条消息,或者将创建对服务器上现有版本的引用。这没有上传视频。

问:我们如何使用 JavaScript 分析文件以获得 SHA256 哈希,SHA256 是否足够好,或者我们应该考虑 SHA512(或其他算法)吗?

【问题讨论】:

    标签: javascript scalability sha


    【解决方案1】:

    使用 HTML5 File 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

    【讨论】:

    • 这可能需要很长时间,但是在已上传同一电影的另一个版本的情况下上传电影也需要很多时间。我们肯定会运行一些基准测试。
    【解决方案2】:

    暂时先把文件放在一边,如果问题实际上是是否可以在 JavaScript 中获取 SHA-256 哈希值,那么答案是肯定的。您可以自己重新实现(坏主意)或使用像 Stanford JS Crypto library 这样的库(好主意)。

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

    【讨论】:

      【解决方案3】:

      简单的答案,你不能。也就是说,如果您想至少支持所有浏览器。我认为 Chrome 和 FireFox 都支持在客户端读取文件,IE 借助 ActiveX 控件支持它,但要获得适用于所有浏览器的解决方案,您必须使用 Flash 或 Silverlight 等插件。另外,在上传视频大小(大文件)的文件时,我认为从一开始就使用 Flash 或类似的东西是个好主意,但这只是我的意见。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-10
        • 2018-06-15
        • 1970-01-01
        • 2014-06-16
        • 2019-05-30
        • 1970-01-01
        相关资源
        最近更新 更多