2012-01-15 81 views
1

我正在使用valums ajax上傳組件(http://valums.com/ajax-upload/)。我的網站將會讓用戶上傳大小超過500MB的文件。我有嚴格的純HTML要求。我可以在Internet Explorer中成功上傳此大小的文件。但是,當我嘗試使用Chrome時,該文件絕不會寫入服務器,而只會出現在大文件的情況下。對於較小的文件,該文件被成功寫入。但是對於較大的文件,我得到「最大請求長度超出錯誤」。大文件上傳失敗,在谷歌瀏覽器中使用

考慮到我可以用IE上傳這種大小的文件,我知道我的web.config中的設置是正確的。這使我相信XHR實現中有一些東西需要設置爲適應這種大小的文件。但是,我不確定那是什麼。值與ASP.NET MVC使用任何人都可以提供樣本的是:

  • 允許大(> 500 MB)的文件上傳IE和Chrome
  • 顯示上傳文件的瀏覽器中支持XHR進展

非常感謝!

+0

你是否看到「最大請求長度超出錯誤」作爲黃色死亡屏幕? – danludwig 2012-01-15 18:00:05

回答

2

我無法重現您的問題。這是我的設置,其中我將文件限制爲1GB。

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Upload(string qqfile) 
    { 
     var path = Server.MapPath("~/App_Data"); 
     var file = Path.Combine(path, qqfile); 
     using (var output = System.IO.File.OpenWrite(file)) 
     { 
      Request.InputStream.CopyTo(output);     
     } 
     return Json(new { success = true }); 
    } 
} 

Index.cshtml視圖:

@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <title>Test</title> 
    <link href="@Url.Content("~/Content/fileuploader.css")" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
    <div id="file-uploader">  
     <noscript>   
      <p>Please enable JavaScript to use file uploader.</p> 
     </noscript>   
    </div> 
    <script src="@Url.Content("~/Scripts/fileuploader.js")" type="text/javascript"></script> 
    <script type="text/javascript"> 
     var uploader = new qq.FileUploader({ 
      element: document.getElementById('file-uploader'), 
      action: '@Url.Action("upload")' 
     }); 
    </script> 
</body> 
</html> 

的web.config:

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <add key="webpages:Version" value="1.0.0.0"/> 
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
    </appSettings> 

    <system.web> 

    <httpRuntime maxRequestLength="1048576" executionTimeout="3600" /> 

    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </assemblies> 
    </compilation> 

    <pages> 
     <namespaces> 
     <add namespace="System.Web.Helpers" /> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.WebPages"/> 
     </namespaces> 
    </pages> 
    </system.web> 

    <system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="1073741824" /> 
     </requestFiltering> 
    </security> 
    </system.webServer> 

    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

觀光web.config中要注意的是<httpRuntime>

<httpRuntime maxRequestLength="1048576" executionTimeout="3600" /> 

,如果你是在IIS7 +(<requestLimits>)主辦本網站以及需要:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="1073741824" /> 
     </requestFiltering> 
    </security> 
</system.webServer> 

在此設置下,我能夠在Firefox 8.0的最新版本上傳高達大小1GB, IE9和Chrome 16.

我已使用IIS Express在本地託管該站點。

+1

嗨!我使用所有這些設置,但不起作用 – 2012-03-24 19:03:47