在Java中设置文件下载的内容类型
在我的应用程序中,我喜欢提供文件下载功能。我将文件类型设置为response.setContentType
。如何设置几乎所有已知文件类型的内容类型?有什么简单的方法吗?或者我需要像现在一样手动设置,如下所示
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 + "\"");
}
# 1 楼答案
要给出@skaffman在使用Servlet时列出的工作示例,请执行以下操作:
# 2 楼答案
Java1.7中添加了FileTypeDetector类,该类允许探测文件以猜测其类型
具体来说,您可以使用Files.probeContentType。一些信息here。下面是一个代码示例:
根据文档,probeContentType是高度特定于实现的 而可以只检查文件名,也可以使用文件属性,或者检查文件中的字节
正如skaffman回答的,还有MimetypesFileTypeMap,相比之下,通过文件扩展名提供文件的数据类型
# 3 楼答案
看看javax.activation.MimetypesFileTypeMap(作为Java6的一部分提供,可以下载到以前的版本中)。它有一个返回给定文件名的mime类型的方法
不过,我自己从未尝试过使用它,而且您可能仍然需要为它提供一个mime类型列表。不过值得一看
# 4 楼答案
URLConnection.getFileNameMap().getContentTypeFor(string)
适用于txt、pdf、avi;文档、odt、mp3失败