http下载小实例
前端download.jsp<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'book.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <%=path %> <body> <p><a href=DownFileServlet?filename=java.rar>java</a></p> <p><a href=DownFileServlet?filename=dos.rar>dos</a></p> <p><a href=DownFileServlet?filename=com.rar>com</a></p> </body> </html>
后台servlet:
package com.guohui.test.file;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class DownFileServlet */public class DownFileServlet extends HttpServlet {/** **/private static final long serialVersionUID = 7627015152811667298L;private static final String CONTENT_TYPE = "text/html; charset=utf-8";// Initialize global variablespublic void init() throws ServletException {}// Process the HTTP Get requestpublic void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType(CONTENT_TYPE);// 得到下载文件的名字String filename=request.getParameter("filename");// 解决中文乱码问题//String filename = new String(request.getParameter("filename").getBytes(//"iso-8859-1"), "gbk");// 创建file对象//String fileDir = System.getProperty("user.dir",".")+"/dos.rar";// + File.separator + filename;//File file = new File(fileDir);InputStream is=getServletContext().getResourceAsStream( "resource"+File.pathSeparator+filename );String fileDir2 = this.getServletContext().getRealPath("resource");File file = new File(fileDir2+"/"+filename);System.out.println(fileDir2+"/"+filename);System.out.println(File.separator);//File.pathSeparator// ://File.separator // /// 设置response的编码方式response.setContentType("application/x-msdownload");// 写明要下载的文件的大小response.setContentLength((int) file.length());///设置附加文件名response.setHeader("Content-Disposition","attachment;filename="+filename);// 解决中文乱码//response.setHeader("Content-Disposition", "attachment;filename="//+ new String//(filename.getBytes("gbk"), "iso-8859-1"));// 读出文件到i/o流FileInputStream fis = new FileInputStream(file);BufferedInputStream buff = new BufferedInputStream(fis);byte[] b = new byte;// 相当于我们的缓存long k = 0;// 该值用于计算当前实际下载了多少字节// 从response对象中得到输出流,准备下载OutputStream myout = response.getOutputStream();// 开始循环下载while (k < file.length()) {int j = buff.read(b, 0, 1024);k += j;// 将b中的数据写到客户端的内存myout.write(b, 0, j);}// 将写入到客户端的内存的数据,刷新到磁盘myout.flush();}// Process the HTTP Post requestpublic void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}// Clean up resourcespublic void destroy() {}}
页:
[1]