Загрузка нескольких файлов - MVC... есть ли ограничение на общий размер файла?
У меня есть форма, из которой пользователи могут добавить список свойств. Помимо данных, которые пользователь должен ввести, пользователь также может загрузить несколько изображений. Я использую несколько атрибутов HTML5, чтобы позволить пользователям загружать более одного файла одновременно.
По какой-то причине у меня всегда срабатывает метод HttpPost Add, когда я загружаю одно изображение. Однако, когда я пытаюсь загрузить несколько изображений, метод не срабатывает. До сих пор я не получаю никаких ошибок, поэтому я не уверен, что не так с моей реализацией.
HTML
@using (Html.BeginForm("AddProperty", "User", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<fieldset>
<legend>Property</legend>
<div class="editor-label">
Title
</div>
<div class="editor-field">
<input type="text" name="title" />
</div>
<div class="editor-label">
Description
</div>
<div class="editor-field">
<input type="text" name="desc" />
</div>
@* ... more input fields... *@
<div class="editor-label">
Images
</div>
<div class="editor-field">
<input type="file" multiple="multiple" name="file" />
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
контроллер
[HttpPost]
public ActionResult AddProperty(FormCollection form, IEnumerable<HttpPostedFileBase> file)
{
Property p = new Property();
p.Title = form["title"];
p.Description = form["desc"];
// ... setting Property fields
new PropertiesBL().AddProperty(p);
for (int i = 0; i < file.Count(); i++)
{
// ... loop and save uploaded file(s)
}
}
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ - Дальнейшее тестирование
Чтобы проверить загрузку файла, я создал новое представление с помощью формы, содержащей загрузчик файлов. Я пытался загрузить файлы разных типов. Я заметил, что при загрузке, например, 10 документов, метод Upload срабатывает. Но при попытке загрузить 3 (большие) изображения это не сработало. Я думаю, что есть какое-то ограничение в отношении общего количества загружаемых байтов... Я не уверен, имеет ли это смысл.
Простой тест
<form method="post" action="/Test/Upload" enctype="multipart/form-data">
<input type="file" multiple="multiple" name="images" />
<input type="submit" value="Upload" />
</form>
[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> images)
{
return RedirectToAction("Index");
}
Я также попытался загрузить несколько файлов отдельно. Когда я пытаюсь загрузить 3 больших изображения (каждое изображение около 2 МБ), метод не срабатывает. Я почти уверен, что это проблема, связанная с каким-то общим максимальным размером файла.
<form method="post" action="/Test/Upload" enctype="multipart/form-data">
<input type="file" name="image_1" />
<input type="file" name="image_2" />
<input type="file" name="image_3" />
<input type="submit" value="Upload" />
</form>
1 ответ
Проблема была с максимальным количеством байтов, которое можно загрузить. Это можно изменить, установив maxRequestLength
в файле web.config.
Ссылка
Как загрузить большие файлы с помощью MVC 4?
Код:
<system.web>
<httpRuntime targetFramework="4.5"
maxRequestLength="2147483647"
executionTimeout="1600"
requestLengthDiskThreshold="2147483647" />
....
</system.web>
Ответ на связанный вопрос, перечисляет следующее под <system.web>
тег, однако я мог только добавить его в <system.webServer>
тег:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="2147483647" />
</requestFiltering>
</security>
....
</system.webServer>