2010-02-11 64 views
7

在我的应用程序中,我喜欢提供文件下载功能。我将文件类型设置为response.setContentType。如何为几乎所有已知的文件类型设置内容类型?有没有简单的方法?或者我需要像现在这样手动设置它,如下所示。在java中设置文件下载的内容类型

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 + "\""); 
} 

谢谢:)

+0

您的容器(例如Tomcat)的通常会提供这样的逻辑,例如:http:// www.developershome.com/wap/wapServerSetup/tutorial.asp?page=settingUpMIME - 你想重写这个吗? – Pool 2010-02-11 14:11:17

+1

好问题。建议:不要说“请帮助”。人们在这里帮助(并且从别人的问题中学习和自己学习),不需要强调这一点。我看到人们(不恰当地,在我看来!)实际上只是为了说“请帮助”而使人们退缩。奇怪但真实。 – 2010-02-11 14:12:00

+2

题外话:这段代码有点脆弱,不是吗?如果'pictureName'是“gifford.pdf”呢? – 2010-02-11 14:13:20

回答

9

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

虽然我从来没有尝试过使用它,但仍有可能您仍然需要为其提供一个MIME类型列表。值得一看,但。

+1

测试在我的Mac OS X 10.5.8,爪哇1.6.0_17, 新MimetypesFileTypeMap中()的getContentType(文件名) 产生这些结果: x.jpg图像/ JPEG, x.jpeg图像/ JPEG, X。 gif image/gif, x.pdf application/octet-stream, x.html text/html, x.zip application/octet-stream。 [确认,作为评论的格式不正确。我应该把它作为一个单独的答案发布,还是可以编辑的人把它放在这个答案中?] – 2010-02-11 15:11:04

+0

@Kevin:我不确定,你支持我的回答,还是不同意? :) – skaffman 2010-02-11 22:23:25

+0

试图提供有关此解决方案工作情况的数据。没有意见,真的。 – 2010-02-12 01:32:24

0

URLConnection.getFileNameMap().getContentTypeFor(string)适用于txt,pdf,avi;失败的DOC,ODT,MP3 ...

1

要给人使用Servlet时什么@skaffman上市工作的例子:

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