Невозможно загрузить несколько файлов в обработчик.ashx

System.InvalidCastException: невозможно преобразовать объект типа "System.String" в тип "System.Web.HttpPostedFile".

Это ошибка, которая появляется в моем заголовке ответа. Я не могу отправить несколько файлов через AJAX для обработчика.

JQuery

            var data = new FormData();
            jQuery.each($('#multipleFileUpload')[0].files, function (i, file) {
                data.append('file-' + i, file);
            });

            $.ajax({
                url: "../handlers/project/sell/galleryUpload.ashx",
                type: "POST",
                contentType: false,
                processData: false,
                cache: false,
                async: true,
                data: data,
                error: function (data) {
                    alert("Erro no envio de fotos do projecto. " + data.status);
                }
            });

Обработчик:

foreach (HttpPostedFile file in context.Request.Files)
{ ... } 
//it gives error in this line

2 ответа

Решение

У меня была такая же проблема. Я не знаю почему, но проблема возникает при переборе коллекции context.Request.Files с foreach петля.

Вместо этого используйте традиционный for цикл и явное приведение к HttpPostedFile вместо этого.

HttpFileCollection files = context.Request.Files;
for (int i = 0; i < files.Count;i++ )
{
    HttpPostedFile file = files[i];
    string fname = context.Server.MapPath("~/uploads/" + file.FileName);
    file.SaveAs(fname);
}

Источник: http://www.binaryintellect.net/articles/f2a2f1ee-e18a-416b-893e-883c800f83f4.aspx

AjaxUpload зависит от браузера, какой браузер вы используете?

Ваша форма с enctype="multipart/form-data"?

Посмотрите в этом ответе:

JS: Как отправить несколько файлов с использованием FormData(jQuery Ajax)

Другие вопросы по тегам