У меня есть веб-приложение, которое позволяет пользователю загружать файл изображения с сервера. Когда пользователь нажимает кнопку на странице jsp, создается запрос ajax post, который выполняет сервлет и в ответ отправляет файл изображения. Но проблема в том, что файл изображения никогда не загружается, а диалоговое окно «Сохранить как» не подходит.Диалог загрузки файла сервлета Java не отображается
В Firebug я вижу, что запрос отправлен правильно и ответ получен с правильным кодом типа Contect и кодом состояния 200. Я также вижу двоичные данные на вкладке Response Response, но по какой-то причине изображение не загружается. Помощь Pls.
Запрос: * URL запроса: http://localhost:8080/SVGToImage/convertToImg
Запрос Метод: POST
Код состояния: 200 OK *
Ответ:
* Content-Disposition: имя файла = "out.jpg"
Content-Type: изображение/JPEG
Дата: Пт, 31 мая 2013 17:28:26 GMT
Сервер: Apache-Coyote/1,1
Transfer-Encoding: фрагментированное *
Вот мой JSP
<head>
<script>
function exportToImage(){
var svg = document.getElementById("ext-gen1040");
var svg1 = new XMLSerializer().serializeToString(svg);
jQuery.noConflict();
jQuery.ajax({
url: "convertToImg" ,
type: "POST",
data: { q = svg1},
success: function(data) {
},
error: function(jqXHR, textStatus, errorThrown) {
alert('Error ' + textStatus);
}
});
</script>
</head>
<body>
<input type="button" value="export" onclick="javascript:exportToImage();">
</body>
На стороне сервера здесь код сервлета:
private void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String filePath = "C:/Users/nandan.jain/Pictures/out.jpg";
File file = new File(filePath);
int length = 0;
ServletOutputStream outStream = response.getOutputStream();
response.setContentType("image/jpeg");
response.setContentLength((int)file.length());
String fileName = (new File(filePath)).getName();
// sets HTTP header
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
byte[] byteBuffer = new byte[BUFSIZE];
DataInputStream in = new DataInputStream(new FileInputStream(file));
// reads the file's bytes and writes them to the response stream
while ((in != null) && ((length = in.read(byteBuffer)) != -1))
{
outStream.write(byteBuffer,0,length);
}
in.close();
outStream.close();
}
Благодаря
Hi BalusC, Спасибо за объяснение. Я внес изменения в соответствии с вашими предложениями, и это сработало хорошо. Спасибо, что помогли мне и очень быстро ответили. – always
Добро пожаловать. – BalusC
@BalusC Я понимаю, что это сообщение с прошлого года, но это помогло мне узнать, что вы не можете скачивать файлы с помощью ajax. Поэтому у меня есть форма, которая передается сервлету (а не через ajax), который создает файл и отправляет его в браузер для загрузки пользователем. Я хочу показать загрузочное изображение, пока этот сервлет работает, потому что он занимает много времени. Как я могу показать загрузочное изображение во время этой обработки сервлета, если я не использую ajax для отправки формы? – Lani1234