java两种常用文件下载实例

  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");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值