【问题标题】:Huge file upload海量文件上传
【发布时间】:2012-09-17 16:40:46
【问题描述】:

我有一个接受非常大的文件的网络服务。通常在 10 - 15 GB(不是 MB)的范围内。 然而,使用浏览器上传只能在 Linux 上使用 Chrome。尝试上传此类文件时,所有 3 种主要浏览器都有不同的缺陷:

  • Internet Explorer 在正好 4GB 后停止。
  • Firefox 根本无法启动。
  • Chrome(在 Windows 上)传输整个文件,但无法发送关闭绑定(改为发送 0xff)。

现在我们正在寻找一种让上传工作正常进行的方法。最好只使用 HTML/JS,但我认为没有办法做到这一点。第二次尝试是闪存,但 FileReference 似乎会因文件 > 4GB 而中断。最后一种方法是 Java,但这不是我们在浏览器客户端中寻找的。​​p>

请注意,这是关于客户端的。我知道服务器端代码有效,因为我可以在 Linux 上使用标准 HTML-Upload 和 Chrome 上传 12GB 文件。它是迄今为止唯一有效的浏览器/操作系统组合,但因此我确信,服务器代码很好。

有谁知道让大文件上传工作的任何方法?

问候, 史蒂芬

【问题讨论】:

  • 这可能会有所帮助:“使用 html5 分块上传文件”stackoverflow.com/questions/7853467/…
  • 一次上传 4gb 是不行的,临时块被保存到内存中,所以想象一下如果 10 个用户同时上传 4gb 文件大小会怎样。强烈建议使用块!
  • 我不确定,你所说的块是什么意思。我知道块编码,这是 javascript 代码无法控制的。我还阅读了第一条评论中链接的答案 - 但这只能在 chrome 中使用......是否有第三种解释块?
  • 文件上传,按照您的理解,发生在 HTTP 级别。它不会发生在 HTML、Javascript 等中。这些只是为该功能提供接口。所有分块/传输都可以被认为发生在 HTTP 协议级别(显然,您可以使用比这更低的协议,但我猜这只会让您更加困惑)。

标签: actionscript-3 flash html browser upload


【解决方案1】:

有一个相当年轻的 JS/HTML5 API 可能涵盖您的用户案例:

https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications

不过,我不能说它的适用性。

【讨论】:

  • 现在使用 html5 的 File API 解决了这个问题。但是,这不包括(甚至包括)版本 9 的 IE。如果有任何方法可以让此类上传在 IE9 中工作,我会很高兴听到。
【解决方案2】:

如果您使用 IIS,默认最大文件上传为 4GB。您需要在脚本或服务器设置中更改此设置。

见:Increasing Max Upload File Size on IIS7/Win7 Pro

【讨论】:

  • 默认 iis 不是 4gb,但最大允许是 4gb。
  • 这与服务器端无关 - 它工作正常,因为我可以在 linux 下从 chrome 上传 12GB 文件。这是关于浏览器方面的......
【解决方案3】:

通常,您会使用流式上传来分解和上传此类文件。如果您获取文件的有限数据,则将该部分上传到服务器,服务器将数据附加到文件中。重复直到上传完整的文件。您可以使用FileStream(更新:仅限 Adob​​e AIR)或使用 javascript 使用实验性的 Blob/FileReader 部分读取文件。我想这可能是解决问题的方法。

我认为这个解决方案可能会有所帮助: AS3 fileStream appears to read the file into memory

让我知道这是否可行,这是一个有趣的问题。

【讨论】:

  • 很遗憾,FileStream 仅适用于 AIR。
猜你喜欢
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 2011-09-20
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多