我正在使用一个简单的servlet,它将数据库中的文档内容作为字节数组发回。我想设置内容type,以便在通过doGet()调用检索内容时具有适当的扩展名。
我确实将文档类型存储为数据库中的元数据(例如png,gif,png,xls,docx ...)。
答案 0 :(得分:12)
我应该将什么设置为内容类型,以便保留文件扩展名?
使用ServletContext#getMimeType()
根据文件名获取mime类型。
String mimeType = getServletContext().getMimeType(filename);
servletcontainer通常已在其自己的web.xml
中提供默认的mime类型映射。如果要覆盖或添加其他内容,请将其作为新的mime映射放在webapp的web.xml
中。 E.g。
<mime-mapping>
<extension>docx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.document</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xlsx</extension>
<mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>
</mime-mapping>
最后将其设置为Content-Type
响应标头:
response.setContentType(mimeType);
下载的文件名为“doc”,如何在servlet上设置要下载的数据的文件名。
将其添加到servlet URL,因为某些浏览器(如MSIE)会忽略内容处置的filename
属性。
<a href="download/filename.ext">download filename.ext</a>
如果servlet映射到/download/*
的URL模式,那么您可以按如下方式获取它
String filename = request.getPathInfo().substring(1);
最后在Content-Disposition
标题中设置它以使普通浏览器感到高兴:
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
如果您不在DB中存储文件名,而是存储ID或其他内容,则将其用作文件名。
<a href="download/${file.id}.${file.ext}">download ${file.id}.${file.ext}</a>
然后在servlet中
String filename = request.getPathInfo().substring(1);
String id = filename.split("\\.")[0];
// Obtain from DB based on id.
答案 1 :(得分:8)
- 我应该将什么设置为内容类型,以便保留文件 扩展
醇>
您可以使用响应对象的setContentType方法来设置mime。例如:
response.setContentType("your-correct-mime-here");
2.文件下载名称为“doc”,如何设置 servlet上的数据文件名 正在下载
您可以通过设置正确的标题来设置要下载的文件的文件名。您可以使用Content-Disposition,如下所示:
response.setHeader("Content-Disposition", "attachment; filename=\"" + your_file_name + "\"");