目标:
生成多个csv文件,并打包返回给前端
生成csv文件打包zip 返回文件流
开干:
1 引入pom
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.4</version></dependency>
2 获取数据,然后生成csv文件
控制器如下:
@PostMapping("/export")@ApiOperation("导出")public void export(@RequestBody GraphData graphData, HttpServletResponse response, @PathVariable String space) throws UnsupportedEncodingException {vertexService.export(graphData,response,space);}
主要是通过 response 返回文件流;
通过数据写入到csv中
String fileName = "关系-" + key;String pathname = path + "/" + fileName + ".csv";//生成的文件位置 和 文件名称CsvWriter csvWriter = CsvUtil.getWriter(new File(pathname), CharsetUtil.CHARSET_UTF_8);//设置编码格式for (List<String> row : value) {//数据集合,写入每行数据csvWriter.write(Convert.toStrArray(row));}csvWriter.flush();csvWriter.close();// 一个文件已经完成,多个文件 循环此代码 多个文件都放在同一个文件夹下
3 通过生成的文件生成压缩包zip
String demoName = "导出数据.zip";// 压缩包zipString zipPath = path + demoName;//包含zip文件的名称 生成的zip路径 不应该是打包路径的子路径ZipUtil.zip(path, zipPath, CharsetUtil.CHARSET_UTF_8, false);// path 要压缩的路径FileUtil.del(path);// 删除csv源文件 可以不删除//返回压缩包try {BufferedInputStream bis;OutputStream out = response.getOutputStream();response.setContentType("text/html; charset=UTF-8");//设置编码格式response.setContentType("application/octet-stream");// 设置contentyperesponse.setHeader("Content-Disposition", "attachment;filename=".concat(String.valueOf(URLEncoder.encode(space + "_" + randomNumbers + demoName, CharsetUtil.UTF_8))));// 设置返回文件名称bis = new BufferedInputStream(new FileInputStream(zipPath));//定义byte,长度就是要转成zip文件的byte长度,避免浪费资源byte[] buffer = new byte[bis.available()];bis.read(buffer);out.flush();out.write(buffer);} catch (IOException e) {e.printStackTrace();}
最终效果如下
如果觉得《打包文件zip压缩包返回》对你有帮助,请点赞、收藏,并留下你的观点哦!