文件下载(servlet)
1、编写 java 实现
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 下载的文件
// 以’/'开头则是从工程路径下获取。
String file = "/file/computer.png";
// 获取下载的文件内容
ServletContext servletContext = getServletContext();
// 获取要下载文件的文件类型
String mimeType = servletContext.getMimeType(file);
// 通过响应头告诉客户端返回的数据类型
resp.setContentType(mimeType);
// 告诉客户端收到的数据适用于下载的
// Content-Disposition表示收到的数据怎么处理
// attachment表示下载使用,filename=文件名 表示指定下载文件的文件名
// encode避免文件名为中文出现乱码
resp.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.substring(file.lastIndexOf('/') + 1),"UTF-8"));
// 获取需下载的文件的输入流
InputStream inputstream = servletContext.getResourceAsStream(file);
// 获取响应的输出流
ServletOutputStream outputStream = resp.getOutputStream();
// 输入流的数据复制给输出流,输出给客户端
// org.apache.commons.io的工具类
IOUtils.copy(inputstream, outputStream);
}
注意:getResourceAsStream
读取的文件路径只局限与工程的源文件夹中,但是如果配置文件路径是在除了源文件夹之外的其他文件夹中时,该方法是用不了的。
2、注册 Servlet
<servlet>
<servlet-name>download</servlet-name>
<servlet-class>com.workhah.servlet.Download</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>download</servlet-name>
<url-pattern>/download</url-pattern>
</servlet-mapping>
用@WebServlet
注解注册serlvet
也可以
3、演示
如果省去了
resp.setHeader()
这行代码,图片会直接在该网页上显示