Oi pessoal. Estava com um problema que o IEca 6 não aceita o valor "no-cache" no header "Cache-Control" para downloads. Vi aqui e aqui que isso faz com que o IE descarte o arquivo antes de visualizá-lo.
Comentando a linha que coloca esse header resolve o problema parcialmente. O IE consegue baixar o arquivo, mas ele começa a fazer cache deste, e na aplicação que estou criando é inaceitável que faça cache.
No firefox não há nenhum problema.
E então, alguém tem uma idéia do que fazer para o IE aceitar o arquivo sem fazer cache?
package br.com.meuteste.teste;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class FileServlet2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException {
response.setContentLength(750054);
response.setContentType("application/bmp");
// PROBLEMA AQUI!!!!!
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Content-Disposition",
"attachment; filename=\"figurinha.bmp\"");
OutputStream s = response.getOutputStream();
// Manda a figura para o browser.
ImageIO.write(criarFiguraAleatoria(), "bmp", s);
s.flush();
}
private static final Color[] cores = new Color[] {
Color.BLUE, Color.RED, Color.WHITE, Color.YELLOW,
Color.BLACK, Color.CYAN, Color.GRAY, Color.DARK_GRAY,
Color.MAGENTA, Color.LIGHT_GRAY
};
private BufferedImage criarFiguraAleatoria() {
BufferedImage i =
new BufferedImage(500, 500, BufferedImage.TYPE_INT_RGB);
Graphics2D g = (Graphics2D) i.getGraphics();
g.setColor(cores[new Random().nextInt(10)]);
g.fillRect(0, 0, 500, 500);
Ellipse2D e = new Ellipse2D.Double(100, 100, 300, 300);
g.setColor(Color.GREEN);
g.fill(e);
g.setColor(Color.BLACK);
g.drawString(String.valueOf(new Random().nextInt(10000)), 240, 248);
return i;
}
}