首页 文章

超过IIS 7.5和.NET中的2GB文件上载限制

提问于
浏览
8

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

  • IE中存在浏览器限制,只有IE 9/10可以超过2GB According to Eric Law

  • httpRuntimemaxRequestLength 元素是Int32类型,其最大值为2097151,大约为2GB .

看来你可以设置另一个文件大小限制,其中maxAllowedContentLength大约为4GB,因为它是uint类型,但是当我们仍然受到maxRequestLength的2GB限制时有什么好处呢?

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

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

3 回答

  • 1

    今年我在与各种浏览器上传到IIS服务器的大文件进行了大量的斗争 . 这是我发现的:

    ASP.NET supports upload over 2Gb since .Net 4.5(可能它支持最高 long.MaxValue 的文件) . 但是IIS本身不支持超过2Gb的上传 . 因此,IIS中托管的任何服务器都不支持2Gb以上的上传 .

    据我所知,将 maxAllowedContentLengthmaxRequestLength 设置为超过2Gb的值无济于事,因为这些设置适用于ASP.NET,核心问题出在IIS中 .

  • -1

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

    另外:它还带有文件队列模式 .

    以下是如何在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 + "
    "); } }); $("#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("");
        }
    
  • 4

    一种选择是使用AjaxControlToolkit的最新版本,它在其文件上传控件中支持“分块”,即它使用html5文件api将文件分成较小的块并将其发送 .

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

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

相关问题