6

Я использую jQuery Multiple File Upload Plugin для загрузки нескольких изображений. Но формирует сообщения только 1, верх, элемент. Скрипач (POST):Несколько загрузок файлов с ASP.NET MVC и jQuery Несколько плагинов загрузки файлов

POST /Images/UploadImages HTTP/1.1 
Host: localhost:4793 
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-us,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 
Referer: http://localhost:4793/images 
Cookie: .ASPXAUTH=EFAC4E03FA49056788028048AE1B099D3EB6D1D61AFB8E830C117297471D5689EC52EF40C7FE2CEF98FF6B7C8CAD3AB741A5E78F447AB361A2BDD501331A88C7B75120611CEA4FECA40D972BB9401472 
Content-Type: multipart/form-data; boundary=---------------------------1509898581730 
Content-Length: 290022 

-----------------------------1509898581730 
Content-Disposition: form-data; name="album" 

1 
-----------------------------1509898581730 
Content-Disposition: form-data; name="file[]"; filename="Blue hills.jpg" 
Content-Type: image/jpeg 

... 

Вот мой код:

<% using (Html.BeginForm("UploadImages", "Images", FormMethod.Post, new { enctype = "multipart/form-data"})) 
     {%> 

    <%= Html.DropDownList("album", (IEnumerable<SelectListItem>)ViewData["Albums"])%> 
     <br />  
    <input type="file" name="file[]" id="file" class="multi" accept="jpg|png" /> 
     <br /> 
    <input type="submit" name="submit" value="Submit" /> 

    <% } %> 

И код контроллера:

public ActionResult UploadImages(FormCollection formValue) 
    {   
     foreach (string file in Request.Files) 
     { 
      HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase; 
      if (hpf.ContentLength == 0) 
       continue; 

      //do something with file 
     } 
     return RedirectToAction("Index"); 
    } 

Пожалуйста, сообщите мне, как решить эту проблему. Возможно, вы можете посоветовать другим способом позволить пользователю загружать несколько изображений. TIA

PS. Помимо html-кода, созданного элементами управления sript:

<input id="file" class="multi" type="file" accept="jpg|png" name="file[]" style="position: absolute; top: -3000px;"/> 
<input id="file_F1" class="multi MultiFile" type="file" accept="jpg|png" name="file[]" style="position: absolute; top: -3000px;"/> 
<input id="file_F2" class="multi MultiFile" type="file" accept="jpg|png" name="file[]" style="position: absolute; top: -3000px;"/> 
<input id="file_F3" class="multi MultiFile" type="file" accept="jpg|png" name="file[]" style="position: absolute; top: -3000px;"/> 
<input id="file_F4" class="multi MultiFile" type="file" accept="jpg|png" name="file[]"/> 
+0

Изменить имя из файла [] в файл может быть? –

ответ

1

Я думаю, что проблема заключается в файле имени [] в сгенерированном HTML. Очевидно, что это не очень хорошо работает со стороны подключаемого модуля.

Иногда срабатывает правильное поведение. Попробуйте удалить "[]" из имени и посмотреть.

Фактически, поскольку вы не используете поля ввода по имени. Вы можете оставить имя unset аналогичным исходным примерам плагина.

Дайте ему попробовать.

+1

Как все прошло? Это сработало? – Meligy

2

Вы должны уметь привязываться к списку.

public ActionResult UploadImages(List<HttpPostedFileBase> file) 
{ 
// magic 
} 

и ваш вид должен иметь

<input id="file" class="multi" type="file" accept="jpg|png" name="file" style="position: absolute; top: -3000px;"/> 
+2

Список file = всегда null – 1gn1ter

+0

Как это возможно только при изменении одного файла, загружающего тег по этому атрибуту "class = 'multi'" ?! – ghedas

+1

+1 "// magic" я вижу, что вы там делали .. –

1

я нашел. Свойство namePattern должно быть определено для того, чтобы генерировать входы с другим именем.

Для экс .:

<input type="file" accept="gif|jpg|jpeg|png" /> 


<script language="javascript" type="text/javascript"> 
     $(document).ready(function() { 
      $i = (1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20); 
      $(':file').MultiFile({ namePattern: '$name_$i', maxlength: 20 }); 
     }); 
</script> 

Тем не менее, спасибо за вашу помощь.

3

Проблема была в том, что вы пытаетесь получить доступ к массиву, который содержит тот же индекс, что и POST submit, для получения массива файлов с тем же именем.

Вместо

foreach (string file in Request.Files) 
{ 
     HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase; 

использования

for (int i = 0; i < Request.Files.Count; i++) 
{ 
     HttpPostedFileBase hpf = Request.Files[i]; 
7

Я нашел решение. Ответ состоял в том, чтобы изменить HttpPostedFileBase на IEnumerable (если вы загружаете несколько файлов).

У меня были те же проблемы, что и вы, выше. Это решило мою проблему. Вот также хорошая ссылка: Phil Haacks's post

1

look here решение от Phil Haack.

На взгляд

<form action="" method="post" enctype="multipart/form-data"> 

    <label for="file1">Filename:</label> 
    <input type="file" name="files" id="file1" /> 

    <label for="file2">Filename:</label> 
    <input type="file" name="files" id="file2" /> 

    <input type="submit" /> 
</form> 

На контроллере

[HttpPost] 
public ActionResult Index(IEnumerable<HttpPostedFileBase> files) { 
    foreach (var file in files) { 
    if (file.ContentLength > 0) { 
     var fileName = Path.GetFileName(file.FileName); 
     var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName); 
     file.SaveAs(path); 
    } 
    } 
    return RedirectToAction("Index"); 
} 
2

В HTML5, вы можете загружать несколько файлов с одного поля загрузки файла:

<input type="file" id="files" name="files" multiple /> 

В этом случае, ваш метод действия может быть примерно таким:

public ActionResult Index(List<HttpPostedFileBase> files) { 

foreach (var file in files) { 
    ...etc. 
0

вид

<input type="file" id="updFiles" multiple name="updFiles" /> 

Контроллер

if (Request.Files != null && Request.Files.Count > 0) 
{  
    for (int i = 0; i < Request.Files.Count; i++) 
    { 
     HttpPostedFileBase file = Request.Files[i]; 
     if (file != null && file.ContentLength > 0) 
     { 
      var fileName = Path.GetFileName(file.FileName); 
      //store 
      var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"), fileName); 
      file.SaveAs(path); 
     } 
    } 
} 
0

проводка много файлов с JQuery AJAX и .net MVC:

В Виде:

 <input type="file" name="files" multiple class="hidden" id="inputFiles"> 
     <button id="upload" class="btn btn-sm btn-primary" type="button">Încarcă</button> 

В ЯШАХ:

var btnUpload = $("#upload"); 
var inputFiles = $('#inputFiles'); 

    btnUpload.click(function() { 
    inputFiles.trigger('click'); 
}); 

inputFiles.on('change', function() { 
    var formData = new FormData(); 

    for (var i = 0; i < inputFiles[0].files.length; i++) 
     formData.append("files[" + i + "]", inputFiles[0].files[i]) 

    $.ajax({ 
     url: window.baseUrl + "Archivator/Upload", 
     type: "POST", 
     contentType: "application/json, charset=utf-8", 
     dataType: "json", 
     data: formData, 
     processData: false, 
     contentType: false, 
    }); 
}); 

Контроллер:

[HttpPost] 
    public ActionResult Upload(IEnumerable<HttpPostedFileBase> files) 
    { 

     return Content("Succesfully"); 
    } 
Смежные вопросы