Кстати, с текущей XMLHttpRequest
версии 1, используемой jQuery, не можно загружать файлы с помощью JavaScript через XMLHttpRequest
. Обычный обходной путь - позволить JavaScript создать скрытый <iframe>
и вместо этого отправить ему форму, чтобы создать впечатление, что это происходит асинхронно. Это именно то, что делает большинство плагинов для загрузки файлов jQuery, таких как плагин jQuery Form ( пример здесь ).
Предполагается, что ваш JSP с HTML-формой переписан таким образом, чтобы он не был сломан , когда у клиента отключен JS (как у вас сейчас ...), как показано ниже:
<form id="upload-form" class="upload-box" action="/Upload" method="post" enctype="multipart/form-data">
<input type="file" id="file" name="file1" />
<span id="upload-error" class="error">${uploadError}</span>
<input type="submit" id="upload-button" value="upload" />
</form>
Тогда это с помощью плагина jQuery Form всего за
<script src="jquery.js"></script>
<script src="jquery.form.js"></script>
<script>
$(function() {
$('#upload-form').ajaxForm({
success: function(msg) {
alert("File has been uploaded successfully");
},
error: function(msg) {
$("#upload-error").text("Couldn't upload file");
}
});
});
</script>
Что касается сервлетной стороны, здесь не нужно делать никаких специальных действий. Просто реализуйте это точно так же, как если бы вы не использовали Ajax: Как загрузить файлы на сервер с помощью JSP / Servlet?
Вам потребуется дополнительная проверка в сервлете только в том случае, если заголовок X-Requested-With
равен XMLHttpRequest
или нет, чтобы вы знали, какой ответ нужно вернуть в случае, если у клиента отключен JS (как в настоящее время это в основном старые мобильные браузеры с отключенным JS).
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
// Return ajax response (e.g. write JSON or XML).
} else {
// Return regular response (e.g. forward to JSP).
}
Обратите внимание, что относительно новая XMLHttpRequest
версия 2 способна отправлять выбранный файл с использованием новых API File
и FormData
. См. Также Загрузка файла HTML5 в сервлет Java и отправка файла в виде составной части через xmlHttpRequest .