java实现简单的文件下载

大家好,首先我先给大家分析一下步骤。第一步为前台操作,从第二步开始全是后台servlet操作
步骤:
1.定义前台页面,href属性,指向Servlet

<a href="/ESMS/downLoadServlet?filename=下载.jpg">图片1</a>
2在后台定义servlet
    2.1获取文件名
    String filename=request.getParameter("filename");
    
    2.2使用字节输入流加载文件进入内存中
    
      2.2.1找到图片真实路径
          ServletContext context=this.getServletContext();
          String realpath=context.getRealPath("/image/"+filename);
    
      2.2.2用字节流关联数据
          FileInputStream fis=new  FileInputStream(realPath);
    
    2.3指定response响应头
    
       2.3.1设置响应头类型
       String  mimeType=servletContext.getMineType(filename);
       response.setHeader("content-type",mimeType);
    
       2.3.2设置响应头打开方式,并解决中文文件名问题(使用了一个工具类,会在末尾附上)
          获取user-agent请求头
        String agent=request.getHeader("user-agent");
        使用工具类方法编码文件名
         filename=DownLoadUtils.getFileName(agent,filename);
         response.setHeader("content-disposition","attachment;filename="+filename);

    2.4将数据写出到response输出流,并释放资源
     ServletOutputStream sos=response.getOutputStream();
     //定义缓冲区
     byte[] buff=new byte[1024*8];
     //定义流长 初始为0
     int len=0;
     while ((len=fis.read(buff))!=-1){
     sos.write(buff,0,len);
     }
   //释放资源
     fis.close();





   Download工具类代码:作用是解决文件名是中文的问题
public class DownLoadUtils {

public static String getFileName(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;
}

 }
发布了16 篇原创文章 · 获赞 17 · 访问量 1293

猜你喜欢

转载自blog.csdn.net/amazinga/article/details/104320933
今日推荐