在IIS 7.5和.NET中超过2GB文件上传限制

我有一个需要上传(.iso)超过2GB的文件的Intranet应用程序。 看起来2GB文件大小有很多限制因素。

  • IE浏览器中存在浏览器限制,只有IE 9/10可以超过2GB根据Eric Law的说法
  • httpRuntime的maxRequestLength元素的类型为Int32,其最大值为2097151,约为2GB。
  • 看起来您可以将maxAllowedContentLength的另一个文件大小限制设置为大约4GB,因为它是uint类型的,但是如果仍然受到maxRequestLength 2GB的限制,那么这样做会有什么好处呢?

    <system.webServer>
      <security>
        <requestFiltering>
          <requestLimits maxAllowedContentLength="4294967295" />
        </requestFiltering>
      </security>
    <system.webServer>
    

    有没有人有任何解决方案上传超过2GB限制的文件?


    你打开JavaScript解决方案? 如果是这种情况,试试这个jQuery插件,它允许你上传海量数据(很多GB)。 它使用HTML5 FileReader API功能和Silverlight回退来上传文件,如果浏览器不支持提供启发于TCP / IP发送和接收包含相应ACK的包的机制。 这些文件按配置的大小上传(默认为4 MB)。

    Plus:它还带有文件队列模式。

    以下是您如何在Razor视图中使用它的示例:

    $(function () {
    
        var file = $("#file").createUploaderHtml5({
            postDataUrl: "@Url.Action("Upload", "Home")",
            packetSize: 4 * 1024 * 1024,
            onPreparingUpload: function (plugin, ufname, umime, usize) {
                plugin.settings.logger("ufname = [" + ufname + "] umime = [" + umime + "] usize = [" + usize + "]");
                return true;
            },
            onInitPacketArrived: function (plugin, guid) {
                plugin.settings.logger("guid = [" + guid + "]");
            },
            onDataPacketArrived: function (plugin, ack, total) {
                //plugin.settings.logger("ACK [" + ack.Guid + "] packet = [" + ack.Packet + "] total = [" + total + "]");
                var percent = Math.round(ack.Packet / total * 100);
                $("#progressbar").attr("value", percent);
                $("#percent").html(percent + " %");
            },
            onFileUploaded: function (pl) {
                pl.settings.logger("File finished!!!");
            },
            logger: function(msg) {
                var lg = $("#logger");
                lg.html(lg.html() + msg + "<br />");
            }
        });
    
        $("#start").click(function () {
            file.startUpload();
        });
    
        $("#stop").click(function () {
            file.cancelUpload();
        });
    
    });
    

    以下是上传操作的代码:

    [HttpPost]
    public ActionResult Upload(FormCollection collection)
    {
        var packetSize = 4 * 1024 * 1024; // default to 4 MB
        var filePath = Server.MapPath("~/_temp_upload/");
    
        var result = UploadHelper.ProcessRequest(Request, filePath, packetSize);
    
            if (result != null)
            {
                var metadata = UploadHelper.GetMetadataInfo(filePath, result.Guid);
                // do anything with the metadata
            }
    
            if (result != null)
                return Json(result);
            return Content("");
        }
    

    今年我在从各种浏览器向IIS服务器上传大文件的过程中遇到了很多困难。 这是我发现的:

    自从.Net 4.5开始,ASP.NET支持2Gb以上的上传(可能它支持long.MaxValue文件)。 但是IIS本身不支持超过2Gb的上传。 因此,托管在IIS中的任何服务器都不支持通过2Gb上传。

    根据我的理解,将maxAllowedContentLengthmaxRequestLength设置为超过2Gb的值不会有帮助,因为这些设置是针对ASP.NET的,核心问题在IIS中。


    一种选择是使用AjaxControlToolkit的最新版本,该版本支持文件上传控制中的“分块”,即使用html5文件API将文件分割成更小的块并发送。

    我不知道这是否适用于总文件大小问题,但值得研究?

    http://stephenwalther.com/archive/2013/04/30/april-2013-release-of-the-ajax-control-toolkit.aspx

    链接地址: http://www.djcxy.com/p/71589.html

    上一篇: Exceeding the 2GB file upload limitation in IIS 7.5 and .NET

    下一篇: Prism module system from within WCF service?