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