前面有介绍过文件传输的实现,今天来教教大家如何实现网页上的文件下载功能~
仅谈文件传输的话,这与javaSE中学的IO流如出一辙,换汤不换药罢了.
以下为本次小课题的代码实现:
import java.io.FileInputStream; import java.io.IOException; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Test extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //通过路径得到一个输入流 String path = this.getServletContext().getRealPath("/WEB-INF/classes/sourse/photo.jpg"); FileInputStream fis = new FileInputStream(path); //创建字节输出流 ServletOutputStream sos = response.getOutputStream(); //执行输出操作 int len = 1; byte[] b = new byte[1024]; while((len = fis.read(b)) != -1) { sos.write(b, 0, len); } /*方法内可以不关流*/ sos.close(); fis.close(); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
以上代码实现的仅仅是B/S模式的文件传输功能,效果图如下:
要想实现图片的下载功能少不了以下几段代码:
//得到要下载的文件名 String filename = path.substring(path.lastIndexOf("\\")+1); // "\\" == "/" 第一个"\"用于转意 //设置文件名的编码 filename = URLEncoder.encode(filename, "UTF-8"); //告知客户端要下载的文件 response.setHeader("content-disposition", "attachment;filename=" + filename); response.setHeader("content-type", "image/jpeg"); //jpeg的简写为jpg Content-type:下载文件类型
代码全了,这下看看效果如何~
网页刚一打开,文件下载的小窗就自动弹出来了.
有木有心动呢,心动不如行动,赶快上手试试吧~
查看相关git代码请移步:https://github.com/striner/javaCode/blob/master/fileDownloadOnline
喜欢就请关注我,你们的关注是我最大的动力~