Отправка файлов/загрузка файла с помощью 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. Любая помощь или указатель на то, как решить эту проблему, будут очень благодарны. Мне нужно что-то, что работает во всех браузерах.
РЕДАКТИРОВАТЬ: Мне не нужна панель выполнения загрузки, так как файлы обычно невелики. Мне не нужно загружать несколько файлов. Мне просто нужно загрузить один файл.
Ответы
Ответ 1
К сожалению, вы не можете использовать Ajax (XMLHttpRequest
другими словами) для отправки файлов, но вы можете реализовать аналогичное поведение, используя <iframe/>
с <form method="post" enctype="multipart/form-data"/>
, который содержит <input type="file"/>
, который отправляет выбранный пользователем файл, используя "естественным" способом. Вы можете использовать javascript для вызова form.submit()
затем опроса, который <iframe/>
из родительского документа, чтобы проверить, завершен ли процесс загрузки файла.
jQuery
имеет много классных плагинов для выполнения этой работы, мой любимый.