Rozwiązywałem jakiś czas temu problem przesyłania pliku RTF do przeglądarki (dowolnej). Dodatkowym wymaganiem było to, by przeglądarka sama rozpoznała typ pliku jaki do niej został wysłany. Poniżej przedstawiam kod, który realizuje to zadanie:
response.setContentType("application/rtf");
response.setHeader("Content-disposition","attachment; filename=test.rtf");
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] arr = new byte[0];
try {
Integer id = nteger.valueOf(request.getParameter("templateId"));
arr = gen.start(id,SaveTo.STRING).getBytes("ISO8859_2");
} catch (Exception e) {
e.printStackTrace();
}
out.write(arr);
response.setContentLength(((ByteArrayOutputStream) out).size());
OutputStream result = response.getOutputStream();
((ByteArrayOutputStream) out).writeTo(result);
Pierwsze dwie linie kodu to ustawienie odpowiednich parametrów dla nagłówka odpowiedzi. Chciałem w tym miejscu zwrócić szczególną uwagę na zapis ""Content-disposition","attachment; filename=test.rtf"", który pozwala na wysłanie do przeglądarki informacji o zawartości strumienia w tym przypadku strumień to plik rtf. Po otrzymaniu takiego nagłówka przeglądarka będzie potrafiła zaproponować nam akcje adekwatne do zawartości jaką do niej wysłaliśmy.
W następnym kroku uruchamiamy "generator RTF", ustawiamy odpowiednie kodowanie(!) i pobrany strumień wysyłamy do przeglądarki. Oczywiście, kod ten umieszczamy w odpowedniej metodzie serwlet-u:)