gpt4 book ai didi

java - 如何在 servlet 上设置内容类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:08:18 26 4
gpt4 key购买 nike

我正在使用一个简单的 servlet,它以字节数组的形式从数据库发回文档内容。我想设置一个内容type以便它在通过 doGet() 调用检索时具有适当的扩展名。

我确实将文档类型作为元数据存储在数据库中(例如 png、gif、png、xls、docx ...)。

  1. 我应该将什么内容类型设置为保留文件扩展名?
  2. 下载的文件名称为“doc”,如何在 servlet 上为正在下载的数据设置文件名。

最佳答案

What should I set as the content type so that it retains the file extension?

使用 ServletContext#getMimeType() 根据文件名获取 mime 类型。

String mimeType = getServletContext().getMimeType(filename);

servletcontainer 通常已经在它自己的 web.xml 中提供了默认的 mime 类型映射。如果你想覆盖或添加一些其他的,然后把它作为新的 mime 映射放在 webapp 的 web.xml 中。例如

<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);

The file gets downloaded with a name of "doc", how do I set the filename on the servlet for the data being downloaded.

将其添加到 servlet URL,因为某些浏览器(如 MSIE)会忽略内容配置的 filename 属性。

<a href="download/filename.ext">download filename.ext</a>

如果servlet映射到/download/*的URL模式,那么可以通过如下方式获取

String filename = request.getPathInfo().substring(1);

最后在 Content-Disposition header 中设置它,让普通浏览器满意:

response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

如果您不在数据库中存储文件名而是存储 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.

关于java - 如何在 servlet 上设置内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5216190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com