文件下载



function downloadOrderExport(){
    var row=$("#dataTable").datagrid('getSelected');  
    if(row !=null){
        var filepath=escape(encodeURIComponent(row.filePath));
        window.location.href=basePath+"/orderExport/downloadAndUpdate?filePath="+filePath;
    }else{
        $.messager.alert('提示','请选择一条你要下载的记录!');
    }

}

@RequestMapping("/download")
    public void downloadXmlFile(HttpServletRequest request,HttpServletResponse response){
        String filePath=request.getParameter("filePath");
        //为防止文件名乱码,这里进行处理
        try {
            filePath=URLDecoder.decode(filePath,"utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        File file=new File(filePath);
        String fileName=file.getName();
        try{
            InputStream fis=new BufferedInputStream(new FileInputStream(filePath));
            byte[] buffer=new byte[fis.available()];
            fis.read(buffer);
            fis.close();
            //清空response
            response.reset();
            //设置response的Header
            response.setHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes()))
            response.setHeader("Content-length",""+file.length());

            OutputStream toClient=new BufferedOutputStream(response.getOutputStream());
            response.setContentType("application/octet-stream");
            toClient.write(buffer);
            toClient.flush();
            toClient.close();
        }catch(Exception e){
            logger.error("文件下载出错。"+e.getMessage(),e);
            //文件不存在时会在FileinputStream(filePath)读取时异常,进入这里。导致前台页面无响应。这里就进行重定向到原页面,并带上错误标记
            try{
                //request.getCOntextPath()获取项目名,这个必须加上,不然找不到对应path的方法。页面404,这个path对应本类的另一个方法(在下面有)
                response.sendRedirect(request.getCOntextPath()+"/orderExport/toOrderExport?error=error");
            }catch(IOException e1){
                logger.error(e1);
            }
        }
    }

    //转跳到下载的主页面
    @RequestMapping("/toOrderExport")
    public String jumpToOrderExportJsp(){
        return "/orderExport/orderExportIndex";
    }

3.经过前两步,如果要下载的文件有异常,就会进入异常处理模块—通过response请求转发到前台下载页面。但是问题来了:我们是通过window.location.href进行后台。并没有回调函数的功能,该如何接收后台的入参呢?答案是在页面每次加载时进行异常标记的判断!js代码如下:

$(function(){
    function getQueryString(param){
        var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if(r!=null){
            $.messager.alert('提示','你下载的文件不存在!');
        }
    }

    getQueryString("error");

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值