Ошибка загрузки большого файла в Chrome со значениями - PullRequest
1 голос
/ 15 января 2012

Я использую компонент загрузки valjs ajax (http://valums.com/ajax-upload/). На моем сайте пользователи будут загружать файлы размером более 500 МБ. У меня строгое требование чистого HTML. Я могу успешно загружать файлы такого размера в ИнтернетПроводник. Однако, когда я пытаюсь использовать Chrome, файл никогда не записывается на сервер, а только в случае больших файлов. Для небольших файлов файл успешно записывается. Но для больших файлов я получаю «Максимальный запрос».длина превышена ошибка ".

Учитывая, что я могу загружать файлы такого размера с помощью IE, я знаю, что настройки в моем файле web.config верны. Это наводит меня на мысль, что в реализации XHR есть что-то, что необходимоустановить для размещения файлов такого размера. Однако я не уверен, что это такое. Может ли кто-нибудь предоставить пример использования значений с ASP.NET MVC, который:

  • Допускает большие (>500 mb) загрузка файлов в IE AND Chrome
  • Показывает ход загрузки загруженного файла в браузерах, поддерживающих XHR * 10.09 *

Большое вам спасибо!

1 Ответ

2 голосов
/ 15 января 2012

Я не могу воспроизвести вашу проблему. Вот мои настройки, в которых я ограничил файлы до 1 ГБ.

Контроллер:

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>

Благодаря этой настройке я могу загружать файлы размером до 1 ГБ в последних версиях FireFox 8.0, IE9 и Chrome 16.

Я размещал сайт локально с помощью IIS Express.

...