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

参考资料:

原理篇: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();加上的话不应想下载,但是报错。


解决中......


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值