2012-01-15 145 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