2010-02-11 18 views
7

En mi aplicación, me gusta proporcionar la instalación de descarga de archivos. Configuro los tipos de archivo a response.setContentType. ¿Cómo puedo configurar los tipos de contenido para casi todos los tipos de archivos conocidos? ¿Hay alguna manera fácil? o necesito configurarlo manualmente como lo hago ahora, que aparece a continuación.configuración del tipo de contenido en java para la descarga de archivos

if (pictureName.indexOf("jpg") > 0) { 
    res.setContentType("image/jpg"); 
} else if (pictureName.indexOf("gif") > 0) { 
    res.setContentType("image/gif"); 
} else if (pictureName.indexOf("pdf") > 0) { 
    res.setContentType("application/pdf"); 
    res.setHeader("Content-Disposition", "inline; filename=\"" + pictureName + "\""); 
} else if (pictureName.indexOf("html") > 0) { 
    res.setContentType("text/html"); 
} else if (pictureName.indexOf("zip") > 0) { 
    res.setContentType("application/zip"); 
    res.setHeader("Content-Disposition", "attachment; filename=\"" + pictureName + "\""); 
} 

Gracias :)

+0

Su recipiente (por ejemplo Tomcat) por lo general proporciona esta lógica por ejemplo, http: // www.developershome.com/wap/wapServerSetup/tutorial.asp?page=settingUpMIME - ¿desea anular esto? – Pool

+1

Buena pregunta. Sugerencia: No diga "por favor, ayuda". La gente está aquí para ayudar (y para aprender de las preguntas de otras personas además de las suyas), no hay necesidad de insistir en el tema. He visto gente (de manera inapropiada, desde mi punto de vista). De hecho, menospreciaron a la gente por decir "por favor ayuda" y cosas por el estilo. Raro pero cierto –

+2

Fuera de tema: Ese código es un poco frágil, ¿no? ¿Qué pasa si 'pictureName' es" gifford.pdf "? –

Respuesta

9

miren javax.activation.MimetypesFileTypeMap (viene como parte de java6, se puede descargar la versión previa). Tiene un método que devuelve el tipo mime para un nombre de archivo dado.

Nunca he tratado de usarlo yo mismo, sin embargo, es posible que aún necesite proporcionarle una lista de tipos de mime. Vale la pena mirar, sin embargo.

+1

probado en mi Mac OS X 10.5.8, Java 1.6.0_17, nueva MimetypesFileTypeMap() getContentType (nombre de archivo) produce estos resultados: imagen x.jpg /jpeg, x.jpeg image/jpeg, x. gif image/gif, x.pdf application/octet-stream, x.html text/html, x.zip application/octet-stream. [Ack, mal formato como un comentario. ¿Debo publicar esto como una respuesta separada, o alguien que pueda editar ponerlo en este?] –

+0

@Kevin: No estoy seguro, ¿estás apoyando mi respuesta o estás en desacuerdo? :) – skaffman

+0

Intentando proporcionar datos sobre qué tan bien funciona esta solución. Sin opinión, realmente. –

0

URLConnection.getFileNameMap().getContentTypeFor(string) funciona para txt, pdf, avi; falla por doc, odt, mp3 ...

1

Para dar un ejemplo práctico de lo que @skaffman aparece cuando se utiliza un servlet:

 String fileName = "c:/temp/URL.txt"; 
     MimetypesFileTypeMap mimetypesFileTypeMap=new MimetypesFileTypeMap(); 
     response.setContentType(mimetypesFileTypeMap.getContentType(fileName)); 
     response.getOutputStream().write(Files.readAllBytes(Paths.get(fileName))); 
Cuestiones relacionadas