前端下载文件获取返回状态以及删除文件总结

1、获取输出流直接在浏览器下载:加上 os.write(FileCopyUtils.copyToByteArray(file));    很重要,因为如果你先把该下载文件保留在后台服务器想要下载完后删除的话用这种方式写很好,不然delete总是返回false;

protected void doExcelExport(HttpServletRequest request, HttpServletResponse response, File file,String name) {
        OutputStream os = null;
        //XSSFWorkbook hssfWorkbook;
        try {            
            String excelName = new String(name.getBytes("GBK"), "ISO-8859-1");
            //hssfWorkbook = new XSSFWorkbook(file);
            response.addHeader("Content-Disposition", "attachment;filename=" + excelName);
            String explorerType = request.getHeader("User-Agent");
            if (explorerType != null && !"".equals(explorerType) && explorerType.indexOf("MSIE") > 0) {
                response.setHeader("Pragma", "public");
                response.setHeader("Cache-Control", "public");
            }
            os = response.getOutputStream();
            os.write(FileCopyUtils.copyToByteArray(file));    
        } catch (Exception e) {
            e.printStackTrace();
        } finally {            
            if (null != os) {
                try {
                    os.close();
                    file.delete();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

    }
2、如果想用ajax获取下载文件后后台返回的状态,可以使用先把文件导出到服务器的某个路径,然后再执行下载到浏览器的操作,如果直接下载用ajax是行不通的:方式如下:

doExcel:function(){
            $(".mask").css("height", $(document).height());            
            $(".mask").css("width", $(document).width());
            $(".mask").css("line-height", $(document).height()+"px"); 
            $(".mask").show();
            $.ajax({
                type : 'POST',
                dataType : 'json',
                async : true,
                url: 'xxx1',
                data:$('#searchForm').serializeObject(),
                success:function(rep){
                    if(rep == '' ){
                        $('[name="downloadFilePath"]').val(rep);
                        // 先判断返回值再生成文件,返回值由后台设置
                        $('#searchForm').attr('action','xxx2').submit();
                    }else{
                        layer.alert(rep);
                    }
                    setTimeout("obj.closeWin()",3000);
                },
                error:function(){
                    layer.alert('请求服务器错误...');
                }
            });
        },
        closeWin:function(){
            $(".mask").hide();
        },
        
    };

3、后台部分--string代表的就是上述rep值

    @RequestMapping("xxx)
    @ResponseBody
    public String doCreateExcelByData() {
        return xxx;
    }

你可能感兴趣的:(java,jquery,ajax,web,js)