一个可以实现图、声音等文件下载功能的servlet类:
MyServlet.java
package net.csdn.servlet; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { download1(response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void download1(HttpServletResponse response) throws IOException{ //获取所要下载文件的路径 String path = this.getServletContext().getRealPath("/download/15.jpg"); String realPath = path.substring(path.lastIndexOf("\\")+1); //告诉浏览器是以下载的方法获取到资源 response.setHeader("content-disposition","attachment; filename="+realPath); //获取到所下载的资源 FileInputStream fis = new FileInputStream(path); int len = 0; byte [] buf = new byte[1024]; while((len=fis.read(buf))!=-1){ response.getOutputStream().write(buf,0,len); } }
download.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>download.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <a href = "MyServlet">点击下载</a> </body> </html>
这样你就可以实现一个可以下载相关英文或字符名称的文件了,但是对于中文名称的便会出现错误:
如:
将图名称改为”错误.jpg“时:
即:
public void download1(HttpServletResponse response) throws IOException{ //获取所要下载文件的路径 String path = this.getServletContext().getRealPath("/download/错误.jpg"); String realPath = path.substring(path.lastIndexOf("\\")+1); //告诉浏览器是以下载的方法获取到资源 response.setHeader("content-disposition","attachment; filename="+realPath); //获取到所下载的资源 FileInputStream fis = new FileInputStream(path); int len = 0; byte [] buf = new byte[1024]; while((len=fis.read(buf))!=-1){ response.getOutputStream().write(buf,0,len); }
显示为:
会出现不能解析中文名称的问题:
这里只需:
public void download1(HttpServletResponse response) throws IOException{ //获取所要下载文件的路径 String path = this.getServletContext().getRealPath("/download/错误.jpg"); String realPath = path.substring(path.lastIndexOf("\\")+1); //告诉浏览器是以下载的方法获取到资源 //告诉浏览器以此种编码来解析URLEncoder.encode(realPath, "utf-8")) response.setHeader("content-disposition","attachment; filename="+URLEncoder.encode(realPath, "utf-8")); //获取到所下载的资源 FileInputStream fis = new FileInputStream(path); int len = 0; byte [] buf = new byte[1024]; while((len=fis.read(buf))!=-1){ response.getOutputStream().write(buf,0,len); } }
出现上述问题的原因是因为:
在download。html文件中规定了显示方式:
所以应与之保持一致故采用此方法。
好了到这里,你已经可以自己去实现一个文件下载功能的JavaWeb程序了,试一试吧!