在java中设置内容类型以进行文件下载

时间:2010-02-11 14:07:40

标签: java file types mime-types

在我的应用程序中,我想提供文件下载功能。我将文件类型设置为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 + "\"");
}

谢谢:)

4 个答案:

答案 0 :(得分:10)

查看javax.activation.MimetypesFileTypeMap(作为Java6的一部分,可以在以前版本下载)。它有一个方法返回给定文件名的mime类型。

我自己从未尝试过使用它,而且你可能还需要提供一个mime类型列表。值得一看。

答案 1 :(得分:1)

给出@skaffman在使用Servlet时列出的实例:

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

答案 2 :(得分:1)

在 Java 1.7 中添加了 FileTypeDetector 类,允许探测文件以猜测其类型。

具体来说,您可以使用 Files.probeContentType。一些信息here。这是一个代码示例:

File f = new File("c:\\temp\\myFile.mp4");
resp.setHeader("Content-Disposition", "attachment; filename=\"" + f.getName() + "\"");
resp.setContentType(Files.probeContentType(f.toPath()));

根据文档,probeContentType 高度特定于实现 并且可以简单地检查文件名,它可以使用文件属性,或者它可以检查文件中的字节

正如 skaffman 回答的那样,还有 MimetypesFileTypeMap,相比之下,它通过文件扩展名提供文件的数据类型

答案 3 :(得分:0)

URLConnection.getFileNameMap().getContentTypeFor(string)适用于txt,pdf,avi;没有doc,odt,mp3 ......

相关问题