SpringMVC实现查询结果下载为CSV文件

来源:互联网 发布:瓦楞纸箱设计软件 编辑:程序博客网 时间:2024/05/17 12:20

SpringMVC实现下载查询结果为CSV文件

文件下载

SpringMVC提供了一个ResponseEntity类型,使用它可以很方便地定义返回的HttpHeaders和HttpStatus。以下代码演示文件的下载功能:

Controller类的映射路径为data

@Controller@RequestMapping(value = "data")public class DataController {

controllor类实现下载的方法路径映射为download:(/data/download)

    @RequestMapping(value = "/download")    public ResponseEntity<byte[]> d(@RequestParam("company") String Company,            @RequestParam("league") String League,            @RequestParam("year") String Year,            @RequestParam("match") String Match,            HttpServletRequest request,             Model model) throws Exception {        String filename = "download.csv";        List<Data> datas = this.getDataList(Company, League, Year, Match);        ByteArrayOutputStream baos= new CsvUtil().process(datas);        baos.close();        HttpHeaders headers = new HttpHeaders();          //下载显示的文件名,解决中文名称乱码问题          String downloadFielName = new String(filename.getBytes("UTF-8"),"UTF-8");        //通知浏览器以attachment(下载方式)打开图片        headers.setContentDispositionFormData("attachment", downloadFielName);         //application/octet-stream : 二进制流数据(最常见的文件下载)。        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);        return new ResponseEntity<byte[]>(baos.toByteArray(),                          headers, HttpStatus.CREATED);        }

其中,getDataList是从数据库查询结果的方法。

<重点1>方法的关键在于,输出流为ByteArrayOutputStream ,他是从CsvUtil工具类process()里得到的流,那是我们自己写的工具类,以及process方法,我们稍后再看。

别忘了关闭流!

后部分配置声明了HTTPHeader,已说明。

<重点2>返回值,ResponseEntity

    public ByteArrayOutputStream process(List<Data> datalist)throws IOException{        ByteArrayOutputStream output = new ByteArrayOutputStream();        CsvWriter csvWriter = new CsvWriter(output, ',', Charset.forName("UTF-8"));            String[] tableheader = {"Company", "League", "Year", "Match", "Win", "Draw", "Lose", "Rate", "UpdateTime"};            csvWriter.writeRecord(tableheader);            for (Data data : datalist) {                csvWriter.writeRecord(this.getData(data));            }            csvWriter.close();            output.close();        return output;    }

将传入数据写入,我们来看看重载的构造方法:
这里写图片描述

重载的write方法:

图片====

这需要导入jar包(添加依赖):

===

然后,只需将前台页面跳转至(/data/download),即可下载。

这里写图片描述

这里写图片描述

参考资料:

http://blog.csdn.net/qian_ch/article/details/69258465

http://www.itkeyword.com/doc/514194264116375232/apache-java-io

https://stackoverflow.com/questions/18275043/spring-download-file-and-redirect

https://stackoverflow.com/questions/46036255/spring-download-excel-file

https://stackoverflow.com/questions/17177303/spring-download-response-as-a-file