SpringMVC下载文件(不是Spring下载文件)

来源:互联网 发布:mac浆果色口红 编辑:程序博客网 时间:2024/05/16 10:54

参考资料:

原理篇:http://www.csdn123.com/html/blogs/20130611/21318.htm

实战篇:http://zwtlong.iteye.com/blog/1068532

                http://mayday85.iteye.com/blog/1622445

综合篇:http://blog.csdn.net/wlsyn/article/details/10195193



代码
前台:

function qryPayPlanDownloadData(){    var params = {        "fromDate": $("#fromDate").val(),        "toDate": $("#toDate").val(),        "productName": $("#name").val(),        "consistencyFlag": $("#flag").val()    };    var requestUrl = url('action-mapping/download');    var _form = buildRequestForm(requestUrl, params);    $("body").append(_form);    _form.submit();}function buildRequestForm(requestUrl, jsonParam) {    var _form = $("<form>");    _form.attr("style", "display:none");    _form.attr("target", "");    _form.attr("method", "post");    _form.attr("action", requestUrl);    $.each(jsonParam, function(k, v){        var _input = $("<input>");        _input.attr("type","hidden");        _input.attr("name",k);        _input.attr("value", v);        _form.append(_input);    });    return _form;}

后台:

Action

    @RequestMapping(value = "/download", method = RequestMethod.POST)    public DocumentExcelView queryDownload() throws Exception {        DocumentExcelView viewExcel = new DocumentExcelView(serviceProvider);        return viewExcel;    }

extension

/** * Created by dalin. */public class DocumentExcelView extends AbstractExcelView {    private ServiceProvider serviceProvider;    public DocumentExcelView(ServiceProvider serviceProvider) {        this.serviceProvider = serviceProvider;    }    @Override    protected void buildExcelDocument(Map<String, Object> obj, HSSFWorkbook workbook, HttpServletRequest request, HttpServletResponse response) throws IOException {        HSSFSheet sheet = workbook.createSheet("产品");        sheet.setDefaultColumnWidth(12);        //设置文件属性        HSSFCell cell = getCell(sheet, 0, 0);        setText(cell, "产品");        cell = getCell(sheet, 1, 0);        cell.setCellValue("生成日期:" + new Date().toString());        HSSFCellStyle dateStyle = workbook.createCellStyle();        dateStyle.setBottomBorderColor(HSSFCellStyle.BORDER_MEDIUM_DASHED);        //设置表头        getCell(sheet, 2, 0).setCellValue("名称");        getCell(sheet, 2, 1).setCellValue("特征");        getCell(sheet, 2, 2).setCellValue("值1");        getCell(sheet, 2, 3).setCellValue("值2");        getCell(sheet, 2, 4).setCellValue("是否一致");        getCell(sheet, 2, 5).setCellValue("日期");//        dateStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yyyy"));        //构造文件        createFileData(sheet, request, 3);        Logger.info(this, "create excel file seccessed.[snapshotDate:%s]" + new Date());        String filename = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).toString() + ".xls";        Logger.info(this, String.format("download Excel name:%s.[snapshotDate:%s]", filename, new Date()));//      filename = encodeFilename(filename, request);//处理中文文件名        response.setContentType("application/vnd.ms-excel");        response.setHeader("Content-disposition", "attachment;filename=" + filename);        OutputStream ouputStream = null;        try {            ouputStream = response.getOutputStream();            workbook.write(ouputStream);        } catch (IOException e) {            Logger.error(this, "unknow Excetpion while create download Excel.[snapshotDate:%s]" + new Date(), e);            e.printStackTrace();        } finally {            if (ouputStream != null) {                ouputStream.flush();                ouputStream.close();            }        }    }    /**     * 构造下载文件     *     * @param sheet     * @param request     * @param startRow     */    public void createFileData(HSSFSheet sheet, HttpServletRequest request, int startRow) {        Date fromDate = DateUtils.parse(request.getParameter("fromDate"));        Date toDate = DateUtils.parse(request.getParameter("toDate"));        String name = request.getParameter("name");        String flag = request.getParameter("flag");        List<DTO> list = serviceProvider.getService().queryData(fromDate, toDate, name, flag);        if (CollectionUtils.isEmpty(list)) {            Logger.info(this, "there is no data while download Excel.[snapshotDate:%s]" + new Date());            return;        }        for (int row = 0; row < list.size(); row++) {            getCell(sheet, row + startRow, 0).setCellValue(list.get(row).getName());            getCell(sheet, row + startRow, 1).setCellValue(list.get(row).getFeatures());            getCell(sheet, row + startRow, 2).setCellValue(list.get(row).getbValue());            getCell(sheet, row + startRow, 3).setCellValue(list.get(row).getcValue());            getCell(sheet, row + startRow, 4).setCellValue(list.get(row).getFlag());            getCell(sheet, row + startRow, 5).setCellValue(DateUtils.formatDateString(list.get(row).getCreatedAt()));        }    }    /**     * 设置下载文件中文件的名称     *     * @param filename     * @param request     * @return     *///    public static String encodeFilename(String filename, HttpServletRequest request) {//        /**//         * 获取客户端浏览器和操作系统信息//         * 在IE浏览器中得到的是:User-Agent=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; Alexa Toolbar)//         * 在Firefox中得到的是:User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.10) Gecko/20050717 Firefox/1.0.6//         *///        String agent = request.getHeader("USER-AGENT");//        try {//            if ((agent != null) && (-1 != agent.indexOf("MSIE"))) {//                String newFileName = URLEncoder.encode(filename, "UTF-8");//                newFileName = StringUtils.replace(newFileName, "+", "%20");//                if (newFileName.length() > 150) {//                    newFileName = new String(filename.getBytes("GB2312"), "ISO8859-1");//                    newFileName = StringUtils.replace(newFileName, " ", "%20");//                }//                return newFileName;//            }//            if ((agent != null) && (-1 != agent.indexOf("Mozilla")))//                return MimeUtility.encodeText(filename, "UTF-8", "B");////            return filename;//        } catch (Exception ex) {//            return filename;//        }//    }}



遇到两个问题:

1.MimeUtility编译出错

2.ouputStream.close();加上的话不应想下载,但是报错。


解决中......


0 0
原创粉丝点击