zoukankan      html  css  js  c++  java
  • 文件的下载

    1.利用响应输出流进行文件的下载:response.getOutputStream();

        关键技术:

                本实例主要设置响应头的信息和输出流进行实现:在servlet中

             设置响应头:response.setContextType("application/x-msdownFile")

              2.设置响应头:response.setHeader("content-Disposition","attachment; filename=" +java.net.URLEncoder.encode(filename,"utf-8"));

     下面使用响应流 在Servlet:

     1     System.out.println("dounload servlet");
     2         String path=request.getParameter("path");
     3         // JSP 页面上超链接方式,不是同一个request请求,Session att=null
     4         String att=(String) request.getAttribute("path1");
     5         
     6         
     7         InputStream in=getServletContext().getResourceAsStream("/WEB-INF/files/"+path);
     8         
     9         if(in ==null)
    10         {
    11             request.getRequestDispatcher("/APP/404.jsp").forward(request, response);;
    12         }
    13         //以响应流方式输出对象
    14         response.setCharacterEncoding("UTF-8");
    15         response.setContentType("application/x-msdownload"); 
    16         String fileName=path;
    17         response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
    18         OutputStream out=response.getOutputStream();
    19         byte[] buffer=new byte[1024];
    20         
    21         int len=0;
    22         while((len=in.read(buffer))!=-1)
    23         {
    24             out.write(buffer,0,len);
    25         }
    26             in.close();

    注意:将文件名转换成UTF-8,使用流的方式 注意编码的方式 设置成一致,造成文件名出现乱码,JSP页面的编码方式和response.setCharacterEncoding("utf-8")

    2.防止网站文件盗链接下载:

       关键技术:应用request对象中getHeader()的方法,获取getHeader中referer字段,该值记录了当前请求的上一次访问的地址,

     1 String from=request.getHeader("Referer");
     2         System.out.println(from);
     3         if(from==null || (from.indexOf("localhost:8080/day_04")<0))
     4             request.getRequestDispatcher("/APP/404.jsp").forward(request, response);;
     5         
     6         System.out.println("dounload servlet");
     7         String path=request.getParameter("path");
     8         // JSP 页面上超链接方式,不是同一个request请求,Session att=null
     9         
    10         
    11         String att=(String) request.getAttribute("path1");
    12         
    13         
    14         InputStream in=getServletContext().getResourceAsStream("/WEB-INF/files/"+path);
    15         
    16         if(in ==null)
    17         {
    18             request.getRequestDispatcher("/APP/404.jsp").forward(request, response);;
    19         }
    20         //以响应流方式输出对象
    21         response.setCharacterEncoding("UTF-8");
    22         response.setContentType("application/x-msdownload"); 
    23         String fileName=path;
    24         response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
    25         OutputStream out=response.getOutputStream();
    26         byte[] buffer=new byte[1024];
    27         
    28         int len=0;
    29         while((len=in.read(buffer))!=-1)
    30         {
    31             out.write(buffer,0,len);
    32         }
    33             in.close();
    View Code
  • 相关阅读:
    ASP.NET C# 邮件发送全解
    .NET应用框架架构设计实践 概述
    给大家推荐几个国外IT技术论坛
    IIS 内部运行机制
    大型网站后台架构的Web Server与缓存
    CMD 获得当前目录命令
    html之marquee详解
    sharepoint 富文本编辑器
    C# 将数据导出到Execl汇总(C/S和B/S)
    更改应用程序池的密码 (Windows SharePoint Services)
  • 原文地址:https://www.cnblogs.com/woainifanfan/p/6713675.html
Copyright © 2011-2022 走看看