spring webFlux文件上传/下载

您所在的位置:网站首页 filepart文件读取 spring webFlux文件上传/下载

spring webFlux文件上传/下载

2024-07-13 14:57:13| 来源: 网络整理| 查看: 265

springMvc的文件上传后端通过MultipartFile对象接收, 但是webFlux无法使用该对象接收 可通过如下方法:

import lombok.Data; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.springframework.http.*; import org.springframework.http.codec.multipart.FilePart; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono; import java.io.*; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; //文件上传 @PostMapping("/upload") public String upload(FilePart filePart) throws Exception{ //获取path对象, 第一个参数随意填写 Path path = Files.createTempFile("test", filePart.filename()); //目前不知道干啥用的, 有知道的老哥请留言 filePart.transferTo(path); //获得file对象 File file = new File(path.toString()); //转换为buff输入流 FileReader fileReader = new FileReader(file); BufferedReader bufferedReader = new BufferedReader(fileReader); String str = ""; while ((str = bufferedReader.readLine()) != null) { System.out.println(str); } return "OK"; } //文件下载 @GetMapping("/download") public ResponseEntity downloadByWriteWith() throws Exception { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); //防止中文文件名不显示 String downloadFileName = URLEncoder.encode("字符串下载文件.txt","UTF-8"); headers.setContentDispositionFormData("attachment", downloadFileName); String str = "123你好啊"; byte[] bytes1 = str.getBytes(); // File file = new File(""); // byte[] bytes = Files.readAllBytes(file.toPath()); return new ResponseEntity(bytes1, headers, HttpStatus.CREATED); } @Data class Meals{ private String tcqd; private String wxbs; private String tcbm; private String yhdd; private String sjxm; private String sjdz; private String lxfs; private String sjjg; private String sjlx; private String sbkh; } //excel导出 @GetMapping("/excel") public Mono downloadExcel(ServerHttpResponse response) throws Exception { //构建数据 List mealsList = new ArrayList(); Meals meals = new Meals(); meals.setTcqd("0001"); meals.setTcbm("000254"); meals.setWxbs("asdfadxoiwnhFSAK"); meals.setYhdd("FDSDFK00125"); meals.setSjxm("liumin"); meals.setSjdz("shengtangdasha"); meals.setLxfs("12398432498"); meals.setSjjg("6541"); meals.setSjlx("ddddddd"); meals.setSbkh("555555"); Meals meals1 = new Meals(); meals1.setTcqd("0002"); meals1.setTcbm("0002232323"); meals1.setWxbs("asdfadxoiwnhFSAK"); meals1.setYhdd("FDSDFK00125"); meals1.setSjxm("liumin"); meals1.setSjdz("shengtangdasha"); meals1.setLxfs("12398432498"); meals1.setSjjg("6541"); meals1.setSjlx("啊啊啊啊啊啊啊啊啊啊啊啊啊"); meals1.setSbkh("666666666666"); mealsList.add(meals); mealsList.add(meals1); //Excel表头 String []title = {"套餐渠道","套餐编码","微信标识","用户订单","收件姓名","收件地址","联系方式","收件价格","收件类型","设备卡号"}; //sheet名 String sheetName = "套餐信息"; String fileName = "套餐信息列表.xls"; HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet(sheetName); HSSFRow row = sheet.createRow(0); //这里用了两次独立的for循环,我觉得这样思路更清晰,你也可以用嵌套循环 for (int i=0;i downloadFile(response, file, fileName)); } private Mono downloadFile(ServerHttpResponse response, File file, String fileName) { ZeroCopyHttpOutputMessage zeroCopyHttpOutputMessage = (ZeroCopyHttpOutputMessage) response; try { response.getHeaders() .set(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=".concat( URLEncoder.encode(fileName, StandardCharsets.UTF_8.displayName()))); return zeroCopyHttpOutputMessage.writeWith(file, 0, file.length()); } catch (UnsupportedEncodingException e) { throw new UnsupportedOperationException(); } }


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭