Servlet, problem z OutputStream i pobieraniem pliku

0

Witam, od kilku dni bawię się w jave webową i napotkałem taki oto problem.


	protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
	{
		res.getWriter().append("Served at: ").append(req.getContextPath());
		PrintWriter pw=res.getWriter();
		pw.println("Test 12");
		byte[]bufor=wczytajPlik("C:\\obrazek2.png");
		res.setContentType("image/png"); 
		res.setContentLength(bufor.length);
		res.addHeader("Content-Disposition", "attachment; filename=obraz.png");
		OutputStream os=res.getOutputStream();
		os.write(bufor);
		os.flush();
	}

         private byte[]wczytajPlik(String name) throws IOException
	{
		File file=new File(name);
		long rozmiar= file.length();
		byte[] zawartosc=new byte[(int)rozmiar];
		FileInputStream fis=new FileInputStream(file);
		fis.read(zawartosc);
		fis.close();
		
		return zawartosc;
	}

Kod wyżej odpowiada za to, aby automatycznie odpalało się pobieranie pliku. Jednak czasami działa, czasami nie (dosłownie).
Gdy wyrzucę OutputStream os=res.getOutputStream(); os.write(bufor); os.flush(); odpala się zawsze jednak po pobraniu plik jest uszkodzony.
Czy ktoś wie dlaczego tak się dzieje i jak to naprawić?
Jeżeli chodzi o sytuację kiedy się odpala, a kiedy nie, to ciężko to stwierdzić, ale ogólnie jeżeli jest to jedyny kod na servlecie to wtedy działa, gdy coś zostanie dodane przestaje. Nie pomaga stworzenie nawet osobnego servletu. Liczę na pomoc/wskazówki jak to naprawić :)

0

Po flush wywołaj jeszcze os.close().
Albo nawet zamiast - sprawdź

0

To zamiast:

res.getWriter().append("Served at: ").append(req.getContextPath());
        PrintWriter pw=res.getWriter();
        pw.println("Test 12");

Zrób tak:

final  PrintWriter pw=res.getWriter();
pa.append("Served at: ").append(req.getContextPath());
pw.println("Test 12");

1 użytkowników online, w tym zalogowanych: 0, gości: 1