服务器资源下载简单实现
- 注意需要提前在本地或服务器上的web项目的/WEB-INF/classes/可达鸭.png路径下准备资源
- /WEB-INF放置在此文件下的文件无法通过请求+资源名进行访问,只能通过在web.xml中配置的请求路径信息访问下载,保证了服务器资源的安全性。
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("comeing fileServlet!");
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
ServletContext servletContext = this.getServletContext();
//准备链接资源文件,下面两种设置文件路径都可以
//String realPath = servletContext.getRealPath("/WEB-INF/classes/可达鸭.png");
String realPath = servletContext.getClassLoader().getResource("/可达鸭.png").getPath().replace("%20", " ");
System.out.println(realPath);
String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
//web下载文件的头部设置
//URLEncoder.encode(fileName,"utf-8")对中文进行编码否则会乱码
resp.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(fileName,"utf-8"));
//流数据传输
FileInputStream fis = new FileInputStream(realPath);
ServletOutputStream os = resp.getOutputStream();
int len = 0;
byte[] bytes = new byte[1024];
while ((len=fis.read(bytes))!=-1){
os.write(bytes,0,len);
}
os.close();
fis.close();
}
- 之后在web.xml中配置此文件下载控制器的请求路径。
<servlet>
<servlet-name>DemoServlet01</servlet-name>
<servlet-class>com.xx.servlet.DemoServlet01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DemoServlet01</servlet-name>
<url-pattern>/ds01</url-pattern>
</servlet-mapping>