SpringBoot + iframe 前后端实现简单实用的下载文件、导出excel案例

大家JavaWeb项目中应该都会遇到下载文件或导出excel的需求,特此分享此文,简单明了,可用于实际项目。

1、前端页面,模拟两个按钮:下载文件、导出excel 

注:本案例是使用 SpringBoot 构建的项目,我这里使用的是之前介绍SpringBoot 实现CORS而创建的工程,也可以自己重新创建一个新的SpringBoot项目即可,然后新增如下一个html或jsp页面,使用iframe隐藏域,这里根据id给 iframe标签,设置src属性(改变),会发起一个请求。

不熟悉的可以移步我的另一篇文章:https://blog.csdn.net/a1036645146/article/details/98843846 

2、下载文件

这里只是测试,直接是一段自定义内容,然后通过 OutputStream 输出流进行响应。如果是实际业务,如需从FAST服务器下载,将此替换为自己的下载方法即可,并将下载的内容转为byte[] 字节数组,通过 OutputStream 输出字节内容即可,并且记得设置response响应头信息等,具体如下:

/**
 * @description: 下载测试
 * @author: xianhao_gan
 * @date: 2019/08/15
 **/
@Controller
public class TestController {

    @RequestMapping("/download")
    public void download(HttpServletRequest request, HttpServletResponse response){
        try {
            //用于输出响应流
            OutputStream out = response.getOutputStream();
            byte[] content = "测试下载内容:hello,stwen.".getBytes();

            //如果从自己fast下载
            //String path = request.getParameter("path");
            //byte[] content = FDSTUtil.download(path);
            //文件名也可以从前端传递过来
            //String fileName = request.getParameter("fileName");
            String fileName = "stwen.txt";

            //设置响应头信息
            // rep.setContentType("Image/" + fileName); // 设置相应类型,告诉浏览器输出的内容为图片
            response.setHeader("Pragma", "No-cache"); // 设置响应头信息,告诉浏览器不要缓存此内容
            response.setHeader("Cache-Control", "no-cache");
            response.setHeader("Content-Disposition", "attachment;filename=" +
                    new String(fileName.getBytes("UTF-8"), "iso-8859-1"));
            response.setContentType("application/octet-stream");
            //输出并关闭
            out.write(content);
            out.flush();
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3、导出excel文件

提供一个控制器接口方法,接收前端导出请求:

    @RequestMapping("/excel")
    public void excel(HttpServletRequest request, HttpServletResponse response) throws Exception{
        OutputStream out = response.getOutputStream();
        try {
            //封装好数据到Workbook对象,然后通过OutputStream输出
            Workbook workBook = ExcelUtil.exportExcel();

            if (workBook != null) {
                String name = new String("stwen.xls");
                response.reset();
                response.setContentType("Content-Type: application/vnd.ms-excel");
                response.addHeader("Content-Disposition", "attachment;filename=\"" + name + "\"");
                workBook.write(out);
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
            //先清空输出流里面的内容
            response.reset();
            String returnS = "<script type='text/javascript'>alert('导出失败!');</script>";
            out.write(returnS.getBytes("UTF-8"));
        }
    }

WorkBook依赖如下:

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.15</version>
        </dependency>

excelUtil工具类,实际项目,可能需要读取数据库,而excel也可以配置模板,封装到Workbook 对象,返回控制器,通过输出流响应

package com.stwen.cors.util;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

/**
 * @description: excel工具类
 * @author: xianhao_gan
 * @date: 2019/08/15
 **/
public class ExcelUtil {

    /**
     * 导出excel
     * @return
     * @throws Exception
     */
    public static Workbook exportExcel() throws Exception{
        //可选择模板是.xls格式还是.xlsx格式
        HSSFWorkbook workbook = new HSSFWorkbook();
        //创建一个sheet表,可设置多个sheet
        Sheet sheet = workbook.createSheet("sheet1");
        sheet.setColumnWidth(0,6000 );
        sheet.setColumnWidth(1,6000 );
        sheet.setColumnWidth(2,6000 );

        String []tableHeader = new String[] {"工号","姓名","职位"};
        HSSFRow firstRow = (HSSFRow) sheet.createRow((short) 0);
        for(int i = 0; i < tableHeader.length; i++){
            HSSFCell cell = firstRow.createCell((short)i);
            cell.setCellStyle(workbook.createCellStyle());
            cell.setCellValue(tableHeader[i]);
        }
        return workbook;
    }
}

4、启动项目

浏览器访问项目地址,然后分别点击“下载文件”、“导出excel”

stwen.txt文件内容如下:

stwen.xls 

看完后是不是觉得下载很简单,觉得有用点个赞再走吧0.0,整理不易。

本文来自:CSDN  作者:stwen_gan  https://blog.csdn.net/a1036645146/article/details/99639041

转载请注明出处,谢谢。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值