Как мне захватить загруженные файлы из нескольких элементов ввода HTML 5 - PullRequest
4 голосов
/ 04 марта 2012

Если у меня есть такой элемент ввода:

<input type="file" multiple="multiple" name="file1" />

и выберите несколько файлов, браузер создает несколько файлов с одним и тем же элементом имени 'file1'. Это как множественный выбор списка.

Так как мне перехватить это в ASP.NET, используя коллекцию Request.Files? Коллекция Request.Files.AllKeys показывает все файлы, но значения ключей все одинаковые. Request.Files возвращает строки для каждого ключа, но я могу получить только первый файл, используя ключ:

var file = Request.Files["file1"];

Это дает мне первый файл, но я не могу получить доступ к другим, выбранным таким образом, так как они не имеют уникального имени. Итерация также не работает, так как Request.Files возвращает только ключи, а не фактические записи файла.

Как мне записать эти вторичные файлы в ASP.NET?

Ответы [ 3 ]

5 голосов
/ 04 марта 2012

Во-первых, вы правы, что все ключи коллекции Request.Files будут 'file1' (или каким бы ни было имя вашего элемента ввода).

Однаковы можете просмотреть коллекцию по индексу и получить имя файла каждой загрузки с помощью свойства 'Filename' каждого объекта HttpPostedFileBase.

Каждый объект также будет содержать InputStream, и при отладке этого в Visual StudioИз свойства Length видно, что поток на самом деле содержит содержимое каждого изображения.

Пример:

[HttpPost]
public ActionResult Upload()
{
    for (int i = 0; i < Request.Files.Count; i++)
    {
        Console.WriteLine(Request.Files[i].FileName);
        Console.WriteLine(Request.Files[i].InputStream.Length);
    }

    return View();
}

Полагаю, команда ASP.NET не ожидала загрузки нескольких файлов,Возможно, вы могли бы написать класс адаптера для преобразования Request.Files в коллекцию с помощью итератора HttpPostedFileWrapper, чтобы вы могли использовать структуру for / each.

0 голосов
/ 30 декабря 2013
<input id="File1" type="file" runat="server" size="60" multiple="" />
in .cs file HttpFileCollection uploads = HttpContext.Current.Request.Files; for (int i = 0; i < uploads.Count; i++) { HttpPostedFile upload = uploads[i]; Response.Write(@"alert('"+upload.FileName+"');"); }

Я думаю, это сработает ...

0 голосов
/ 04 марта 2012

Я не уверен, что вы используете MVC, но если так, попробуйте это:

 [HttpPost]
    public ActionResult Upload(HttpPostedFileBase[] files)
    {
       // Stuff with files
    }

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

Также вам необходимо указать атрибут enctype:

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

Надеюсь, это поможет. Я использовал подобный код для обработки файлов, поступающих через этот jQuery плагин для загрузки файлов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...