После отправки формы загрузите файл - PullRequest
0 голосов
/ 04 августа 2011

Я использую Struts2, а также сервлеты.(Из-за стороннего аджакса, который поставляется с сервлетами).

Одна из моих форм - отправка в сервлет.(Имя "/exclude/new.srl") Я установил struts2, чтобы игнорировать все запросы к пространству имен "exclude".Таким образом, запрос достигает сервлета просто отлично.

Сервлет выполняет свою работу, а затем продолжает выполнять следующие действия перед завершением:

response.getOutputStream().print("'OK'");
response.getOutputStream().close();

Теперь я не знаю стороннего программного обеспеченияв деталях, так что я не совсем уверен, но я думаю, что утверждение OK говорит моему стороннему ajax-решению закрыть форму и обновить некоторое содержимое страницы.

Все это прекрасно работает.

Однако сейчас я пытаюсь добавить новый бит к этому.Я хотел бы отправить файл пользователю.Другими словами, когда форма отправляется, все, что раньше происходило, все равно должно происходить, но также необходимо попросить пользователя сохранить или открыть файл.

Итак, я создал действие struts2, которое будет возвращатьфайл, без проблем.Но как я могу запрограммировать сервлет на передачу этого файла пользователю И ТАКЖЕ вернуть ответ ОК?Мне не нужно использовать действие struts2 для отправки файла, если это можно сделать из сервлета, что вполне приемлемо.

Кто-нибудь?

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Вы можете отправить файл

// Set the headers.
res.setContentType("application/x-download");
res.setHeader("Content-Disposition", "attachment; filename=" + filename);

// Send the file.
OutputStream out = res.getOutputStream();
File file = new File(yourPath);
response.setContentLength((int) file.length());

BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
int readBytes = 0;
while ((readBytes = buf.read()) != -1)
    stream.write(readBytes);
buf.close();
stream.close();

Но как я могу запрограммировать сервлет на передачу этого файла пользователю И ТАКЖЕ вернуть ответ ОК?

Я не думаю, что это возможно. Ответ от сервлета имеет тип, обозначаемый типом содержимого. Если вы установите download , то вы не сможете отправить обычный ответ, то есть вы не можете отправить «OK».

0 голосов
/ 04 августа 2011

Вероятно, вам придется настроить не упомянутое стороннее ajax-решение для перенаправления на файл action / servlet URL при успешной отправке формы (т. Е. Перенаправить на загрузку файла после того, как форма была отправлена ​​нормально).

...