Java Web基础之文件下载

来源:互联网 发布:淘宝客微博推广教程 编辑:程序博客网 时间:2024/05/22 14:03

     文件下载第一种方式--超链接下载

               在jsp页面上有三个<a>标签

              

       <a>标签中href的路径直接就是服务器中文件的路径,这些文件都是在day10项目中的download目录下

           <a href="/day10/download/1.gif">1.gif</a><br/><a href="/day10/download/day10.txt">day10.txt</a><br/><a href="/day10/download/day10.doc">day10.doc</a><br/>

            点击<a>标签,浏览器就会解析,能解析的他就会默认打开,不能解析的就会弹出下载,就能把文件下载过来

 文件下载第二种方式--编码下载

     同样在jsp页面上有这三个<a>标签

      但这三个<a>标签的href发生了变化,在路径后面加了个name参数

      

        <a href="/day10/download?name=1.gif">1.gif</a><br/><a href="/day10/download?name=day10笔记.txt">day10笔记.txt</a><br/><a href="/day10/download?name=day10.doc">day10.doc</a><br/>

     然后在download这个servlet类中获取参数以及设置两个头一个流

import java.io.IOException;import java.io.InputStream;import java.net.URLEncoder;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.IOUtils;import com.itheima.utils.DownLoadUtils;/** * 文件下载 */public class DownloadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取下载文件的名称String filename = request.getParameter("name");//注意中文乱码filename=new String(filename.getBytes("iso8859-1"),"utf-8");ServletContext context = this.getServletContext();//文件下载//1.设置文件的mimeTypeString mimeType = context.getMimeType(filename);response.setContentType(mimeType);//2.设置下载的头信息String _filename=DownLoadUtils.getName(request.getHeader("user-agent"), filename);response.setHeader("content-disposition", "attachment;filename="+_filename);//获取输入流InputStream is = context.getResourceAsStream("/download/"+filename);//获取输出流ServletOutputStream os = response.getOutputStream();int len=-1;byte[] b=new byte[1024];while((len=is.read(b))!=-1){os.write(b, 0, len);}os.close();is.close();}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
文件名字乱码问题使用的工具类
import java.io.UnsupportedEncodingException;import java.net.URLEncoder;import sun.misc.BASE64Encoder;public class DownLoadUtils {public static String getName(String agent, String filename) throws UnsupportedEncodingException {if (agent.contains("MSIE")) {// IE浏览器filename = URLEncoder.encode(filename, "utf-8");filename = filename.replace("+", " ");} else if (agent.contains("Firefox")) {// 火狐浏览器BASE64Encoder base64Encoder = new BASE64Encoder();filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";} else {// 其它浏览器filename = URLEncoder.encode(filename, "utf-8");}return filename;}}




    

 
原创粉丝点击