ASP.net - Многократная загрузка с плагином jQuery Multiple File Upload - PullRequest
14 голосов
/ 18 февраля 2009

Я знаю, как загрузить файл с помощью элемента управления FileUpload в ASP.net.

Я хочу использовать этот плагин для загрузки нескольких файлов jQuery для загрузки нескольких файлов.

Вот что делает, когда для загрузки выбрано несколько файлов:

<input type="file class="multi MultiFile" id="MultiFile1_F3" name="file1[]" style="position: absolute; top: -3000px;">

Но я не могу понять, как манипулировать этими файлами с asp.net. Я пытался использовать Request.Files, как указано в следующей ссылке: ASP.Net Загрузка нескольких файлов после выбора их из jQuery

Это не работает. Я думаю, что это работает только для элементов управления, помеченных runat = "server" во время компиляции.

Кто-нибудь знает, как это сделать? Может быть, что-то в Request.Form ...?

Спасибо за вашу помощь!

Ответы [ 4 ]

5 голосов
/ 20 февраля 2009

Две вещи для проверки:

  • Убедитесь, что в вашей форме установлен атрибут enctype = "multipart / form-data". Это необходимо для включения загрузки.
  • Убедитесь, что для всех входных файлов установлены атрибуты id и name. По какой-то причине, если вы не установите оба, происходят странные вещи.

Кроме того, runat = "server" не должен иметь ничего общего с тем, работает ли Request.Files или нет - это больше проблема браузера, фактически размещающего файлы.

5 голосов
/ 20 февраля 2009

Этот плагин jQuery давал каждому сгенерированному элементу управления вводом точно такой же атрибут имени.

По этой причине файлы не публиковались.

Я создал собственное решение для JavaScript.

Я опубликую ссылку на код в комментарии.

Редактировать

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

1.) Включите библиотеку jQuery в веб-форму:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js" type="text/javascript" />

2.) Ссылка на плагин для нескольких файлов в веб-форме ( Скачать его здесь ):

<script src="jquery.MultiFile.pack.js" type="text/javascript">

3.) Добавьте входной файл в веб-форму с помощью class = "multi":

<input type="file" class="multi" />

4.) Выполните некоторый код или вызовите метод, подобный этому, при отправке формы:

    void SendMail(string from, string to, string subject, string body, string smtpServer)
    {
        // create mail message
        MailMessage mail = new MailMessage(from, to, subject, body);

        // attach posted files
        for (int i = 0; i < Request.Files.Count; i++)
        {
            HttpPostedFile file = Request.Files[i];
            mail.Attachments.Add(new Attachment(file.InputStream, file.FileName));
        }

        //send email
        new SmtpClient(smtpServer).Send(mail);
    }

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

Если вы хотите увеличить общий размер загружаемых файлов, добавьте это в файл web.config:

<system.web>
    <httpRuntime executionTimeout="240" maxRequestLength="30720"/>
</system.web>

ExecuteTimeout измеряется в секундах, а maxRequestLength измеряется в килобайтах. В этом примере запрос будет отключен через 4 минуты и разрешит запрос 30 МБ.

2 голосов
/ 23 декабря 2009

Я настоятельно рекомендую Загрузить как загрузчик нескольких файлов. Он использует jquery и flash, чтобы позволить пользователю загружать несколько файлов одновременно с помощью Ctrl + клик по всем нужным файлам. Затем он отображает очередь загрузки файлов и удаляет файл из очереди по завершении. Это также позволяет вам указать, какое расширение разрешить пользователю загружать, что также не позволяет выполнять проверку расширения.

EDIT:
Если вы не хотите использовать flash , Ajax Upload тоже работает очень хорошо. Если у пользователей на сайте компании моего сайта нет нужной версии flash, которая лучше всего работает с uploadify, я переключаюсь на Ajax Upload. Они оба работают очень хорошо для меня.

2 голосов
/ 18 февраля 2009

Прошло немного времени с тех пор, как я делал подобные вещи в .NET, но как только вы начнете динамически клонировать входные данные формы, я думаю, что вам нужно перейти к Request.Form и найти отправленные значения вручную. Я написал код jQuery для клонирования некоторых (не файловых) входных данных с последовательными идентификаторами здесь . Пока у вас есть уникальные идентификаторы, вы можете запустить цикл, чтобы увидеть, существует ли Request.Form ["MultiFile1_F" + counter] и идти оттуда.

...