有没有第三方文件上传工具可以上传大于2GB的文件?

4

基本上,我需要上传大文件,最好能够上传8GB的文件。

由于以下文件上传限制,我的上传受到了限制:

<system.web>
    <!-- set to max value, max request size is 2GB, takes precedence over IIS -->
    <httpRuntime maxRequestLength="2097151" executionTimeout="3600"/>
    ...

<system.webServer>
    <security>
        <requestFiltering>
            <!-- set to max value, IIS max length of content is 4GB -->
            <requestLimits maxAllowedContentLength="4294967295"/>
        </requestFiltering>
    </security>
    ...

我稍微搜索了一下,听说唯一能够突破2GB限制的方法是将文件分割成多个片段上传,但我并没有找到任何可以做到这一点的工具。有人知道吗?


1
你不需要任何工具,只要知道有多少字节,就可以计算出需要多少个不同的片段。上传所有片段后,将它们合并并检查文件的校验和。 - Security Hound
在您喜欢的搜索引擎上搜索“文件分割器”,您会发现几个能够将大文件分成多个部分并将这些部分重新组合在一起的实用工具。 - JSR
8GB很大。你的用户有什么样的连接? - Ray Cheng
@Ramhound - 你有如何做到那个的例子吗? - Steven
只是我个人的看法,但我认为你疯了,认为你能成功让用户上传8GB的文件。随着今天的互联网连接速度,几乎没有机会,也许需要几年时间... - Maxim Gershkovich
2个回答

3
WinRar、7Zip或WinZip应该能够创建被分割成几部分的压缩文件。如果这些文件被上传,您可以通过解压整个归档文件来将它们重新组合在一起。您可以尝试使用7-Zip SDK来压缩/分割这些大文件。使用压缩功能,您还可以减少上传时间和发送的字节数。 可能会有其他类似的工具,如评论所述。 编辑:只是为了明确 - 使用这些压缩工具显然不能让您一次性上传大量文件。它们可用于将大文件轻松压缩和分割成若干更易管理的小块,然后可以使用文件上传控件(或类似的第三方控件)现有的限制来上传它们。使用这些工具将涉及向您的用户提供一个工具,以帮助他们在分割文件后上传这些小块。
这里有一篇文章,其中包含链接到各种商业上传工具,您可以查看,但我不熟悉它们。它还链接到Jeff Atwood的博客条目,提出使用桌面工具进行大文件上传的观点。

1
我认为OP正在寻找一个服务器端控件,用于从网页上的用户接收文件上传。 - Ray Cheng
@sinni800 那可能行,尽管我认为问题不在于服务器端内存,因为上传控件不必在内存中保存整个文件。在我的评论中暗示RayCheng是我的错 - 我没有想好。我会删除那些评论,因为它们没什么用。我认为真正的问题是连接稳定性和浏览器 - 如果连接断开,上传将被浏览器取消。此外,服务器端上传控件无法进行压缩,因此上传大小会更大。 - xxbbcc
@sinni800 我在考虑这个问题,但我不确定浏览器如何处理可恢复下载...我猜可以通过 AJAX 调用来处理,但最终如果浏览器崩溃,进度数据就会丢失,除非服务器有一些广泛的簿记逻辑来处理这个问题。 - xxbbcc
@xxbbcc 我刚发现谷歌已经通过他们的浏览器扩展程序(名为Google Gears)完成了这项工作。Chrome秘密地内置了它,并且Youtube在上传时使用它。尽管谷歌真的推动它在任何地方都可用,但你可能不能指望它(因为它已被取消)。HTTP PUT属于WebDav,可能无法被代理正确处理,对吧。但我认为一个带有一些特殊X-header的基本POST理论上可以解决这个问题。客户端可以有Flash、Java、Native client或其他任何东西...你只需要希望客户端有其中之一即可。 - sinni800
@sinni800 是的,我同意,使用Flash、Java和一个潜在的独立客户端的组合可以实现这一点(也就是说,在给定用户处有一个可用的客户端)。文件可以分成小块上传,这样单个上传不会太长,如果失败,也不需要重新发送太多字节。 - xxbbcc
显示剩余6条评论

0

通过使用HTML5 FileApi实现分块上传,可以绕过.NET Framework的限制。如果上传失败,代码只需要重新上传一个X mb(无论大小)的块,这也将实现上传安全性。

您需要在服务器端和客户端都实现此技术。

以下是有关使用JavaScript、HTLM5 FileAPI、XHR v2和WebWorkers在客户端实现的博客。

http://kongaraju.blogspot.in/2012/07/large-file-upload-more-than-1gb-using.html

这是一个关于ASP.NET的FileUploadControl的代码项目,它能够理解分块上传(绕过2 GB限制)和可恢复上传。它使用HTML5 API,所以需要一个现代浏览器。Firefox 4和当前版本的Chrome(现在应该是Ver 22?太疯狂了)应该可以工作。我现在不清楚Opera,但版本12支持拖放和Webworkers...所以,是的,应该可以工作。
如果没有提供这些功能,文件上传控件将恢复到正常的整个文件POST(2 GB限制)。

1
我删除了第二个链接,因为我找不到替代品。第一个现在可以使用。 - sinni800

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接