Подтвердить что ты не робот

Отправка файлов/загрузка файла с помощью ajax, который работает в IE9

Мне нужно загрузить файлы с помощью ajax, который должен поддерживаться в IE9. Я использовал FormData, как упоминалось здесь. Мой код выглядит следующим образом:

var files = new FormData();
JQuery.each($('#file')[0].files, function (i, file) {
    files.append('file', file);
});

$.ajax({
    type: "POST",
    url: '/url',
    cache: false,
    contentType: false,
    processData: false,
    data: files,
    ...
});

Это отлично работает в Safari и Firefox, но не работает в IE9, поскольку FormData не поддерживается в IE9. Я попытался отправить как файл, установив:

data: $('#file')[0].files[0]
contentType: 'multipart/form-data'

Это не удается, поскольку данные отправляются в кодировке url и не могут быть проанализированы со стороны java. Любая помощь или указатель на то, как решить эту проблему, будут очень благодарны. Мне нужно что-то, что работает во всех браузерах.

РЕДАКТИРОВАТЬ: Мне не нужна панель выполнения загрузки, так как файлы обычно невелики. Мне не нужно загружать несколько файлов. Мне просто нужно загрузить один файл.

4b9b3361

Ответ 1

К сожалению, вы не можете использовать Ajax (XMLHttpRequest другими словами) для отправки файлов, но вы можете реализовать аналогичное поведение, используя <iframe/> с <form method="post" enctype="multipart/form-data"/>, который содержит <input type="file"/>, который отправляет выбранный пользователем файл, используя "естественным" способом. Вы можете использовать javascript для вызова form.submit() затем опроса, который <iframe/> из родительского документа, чтобы проверить, завершен ли процесс загрузки файла.

jQuery имеет много классных плагинов для выполнения этой работы, мой любимый.