java两种常用文件下载实例

来源:互联网 发布:java 编码规范 编辑:程序博客网 时间:2024/06/10 17:47
  1. 方式一:超链接下载
     如果文件格式浏览器识别,将直接打开文件,显示在浏览器上,这是可以右键另存下载。如果文件格式浏览器不识别,将弹出下载窗口。

  2. 方式二:在服务器端编程完成下载。

  3. 超链接下载方式实例:
    <a href=”某个资源连接”>名字</a>

  4. 在服务器端编程完成下载实例:

public void doPost(HttpServletRequset request, HttpServletResponse response) throws ServletException,IOException{    //1.得到要下载的文件名称。    String filename = request.getParameter("filename");    //解决中文乱码问题。因为tomcat的默认的编码为ISO8859-1。转成UTF-8编码。    filename = new String(filename.getBytes["iso8859-1"],"UTF-8");    //2.在对应的目录下查找文件是否存在。    File file = new File("某个目录"+"/"+filename);    if(file.exists()){        //3.文件存在,进行对应操作。        //获取并设置下载文件的mimeType        String mimeType = this.getServletContext().getMimeType(filename);        response.setContentType(mimeType);        //因为不同浏览器下载时文件名字的编码不一样,所以要判断然后对应选择。        String agent = request.getHeader("user-agent");        if(agent.contains("MSIE"))            //如果是IE浏览器            filename = URLEncoder.encode(filename,"UTF-8");        else if(agent.contains("Firefox")){            //如果是火狐浏览器。            BASE64Encoder base64 = new BASE64Encoder();            filename="=?utf-8?B?"+base64.encode(filename.getBytes("UTF-8"))+"?=";        }else            //其他的浏览器。            filename = URLEncoder.encode(filename,"UTF-8");        //不管浏览器是否能解析,都进行下载处理。        response.setHeader("content-Disposition","attachement;filename="+filename);        //读取要下载的文件内容        FileInputStream fis = new FileInputStream(file);        //将要下载的文件内容通过流回写到客户端        OutputStream os = new response.getOutputStream();        int len = -1;        byte[] b = new byte[1024*1024];        while((fis.read(b))!=-1){            os.write(b,0,len);            os.flush();        }        //关闭资源。        os.close();        fis.close();    }else{        //抛出运行异常。        throw new RuntimeException("下载资源不存在!!!");    }}

5 . 服务器端编程下载步骤:
<1>.下载的文件要通过response.getOutputStream()流,回写到客户端。
<2>.设置mimeType
<3>.设置响应头,不管浏览器是否能解析,都下载。

6.文件下载中出现乱码的问题:
<1>.关于下载时中文名称资源找不到的问题。
 原因:超链接下载是get方式请求服务器。在服务器端中,
 String filename = request.getParameter(“filename”);

 解决方案:filename = new String(filename.getBytes(“iso5589-1”),”UTF-8”);

<2>.下载文件时,显示中文乱码问题。
原因: response.setHeader(“content-Disposition”,”attachement;filename=”+filename)中filename这个字符串会根据不同浏览器进行不同的编码,所以会显示乱码。

解决方法:因为filename在判断文件是否存在的时候,会用到,所以在判断存在之后,要根据不同浏览器对filename进行不同的编码。
if(agent.contains("MSIE"))
//如果浏览器是IE浏览器
filename = URLEncoder.encode(filename, "utf-8");
else if(agent.contains("Firefox")){
//如果是火狐浏览器
BASE64Encoder base64 = new BASE64Encoder();
filename = "=?utf-8?B?"+base64.encode(filename.getBytes("UTF-8"))+"?=";
}else
filename = URLEncoder.encode(filename, "UTF-8");

0 0
原创粉丝点击