Ich benutze die nächste Klasse (vereinfacht um der Verständlichkeit Willen), um Bilder in einer Struts-Webanwendung herunterzuladen. Es funktioniert gut in jedem Browser außer Firefox, die Namen mit Leerzeichen schneidet. Das heißt: Datei mit Leerzeichen.pdf wird in Firefox heruntergeladen als: Datei während in Chrome, IE7 IE6 als Datei mit Leerzeichen heruntergeladen wird.pdf.Firefox schneidet Dateien, deren Name Leerzeichen enthält, in einer Struts-Anwendung
public class Download extends Action {
private static final int BUFFER_SIZE = 4096;
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception {
String filename = "file with spaces.pdf";
File file = ... // variable containing the file;
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType(getMimeType(request, file));
response.setHeader("Content-Type", getMimeType(request, file));
response.setHeader("Content-Disposition","attachment; filename="+ filename);
InputStream is = new FileInputStream(file);
sendFile(is, response);
return null;
}
protected String getMimeType(HttpServletRequest request, File file) {
ServletContext application = super.servlet.getServletContext();
return application.getMimeType(file.getName());
}
protected void sendFile(InputStream is, HttpServletResponse response) throws IOException {
BufferedInputStream in = null;
try {
int count;
byte[] buffer = new byte[BUFFER_SIZE];
in = new BufferedInputStream(is);
ServletOutputStream out = response.getOutputStream();
while(-1 != (count = in.read(buffer)))
out.write(buffer, 0, count);
out.flush();
} catch (IOException ioe) {
System.err.println("IOException in Download::sendFile");
ioe.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException ioe) { ioe.printStackTrace(); }
}
}
}
}
Weiß jemand, was hier vor sich geht? Hinweis Ich verwende Firefox 3.0.3 unter Windows Vista.
Ich benutze Grails und als ich das gleiche versuchte, hatte ich Probleme mit einem zusätzlichen Leerzeichen am Ende des Dateinamens. Hier ist mein Code: response.setHeader ("Content-disposition", "attachment; filename = \" $ {meuArquivo.nome} \ "") ohne Leerzeichen. – meurer