Springboot RestTemplate 上传文件

Springboot RestTemplate 上传文件

MultipartFile转File工具类

常用的工具类

import org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration; import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * @description: 常用的工具 * @program: toolkit * @author: Mikael * @date: 2021-06-10 15:36 **/ public class CommonUtil { //默认分隔符 private static String DELIMITER = ","; public String getDELIMITER() { return DELIMITER; } public void setDELIMITER(String DELIMITER) { this.DELIMITER = DELIMITER; } /** * 把以,分割的字符串 转化为list * @param val 分割的字符串 * @param val 分割符 * @return List<String> */ public static List<String> strToList(String val){ return strToList(val,DELIMITER); } /** * 自定义分割的字符串 转化为list * @param val 分割的字符串 * @param val 分割符 * @return List<String> */ public static List<String> strToList(String val,String DELIMITER){ String[] values = val.split(DELIMITER); return Arrays.asList(values); } /** * List 转化为String 用指定分隔符分开 默认, * @param list * @return String */ public static String listToStr(List<String> list){ return listToStr(list,DELIMITER); } /** * List 转化为String 用指定分隔符分开 * @param list * @param DELIMITER * @return */ public static String listToStr(List<String> list,String DELIMITER){ return list.stream().collect(Collectors.joining(DELIMITER)); } /** * MultipartFile 转 File * * @param file * @throws Exception */ public static File multipartFileToFile(MultipartFile file) throws Exception { File toFile = null; if (file.equals("") || file.getSize() <= 0) { file = null; } else { InputStream ins = null; ins = file.getInputStream(); toFile = new File(file.getOriginalFilename()); inputStreamToFile(ins, toFile); ins.close(); } return toFile; } //获取流文件 private static void inputStreamToFile(InputStream ins, File file) { try { OutputStream os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } os.close(); ins.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 删除本地临时文件 * @param file */ public static void deltelTempFile(File file) { if (file != null) { File del = new File(file.toURI()); del.delete(); } } }

UploadController

/** * @description: 文件上传 * @program: toolkit * @author: Mikael * @date: 2021-06-17 17:05 **/ @Controller @Slf4j @Api("文件上传控制器") public class UploadController { @Value("${uploadAddress}") private String uploadAddress; @Autowired RestTemplate restTemplate; @PostMapping("/upload") @ApiOperation(value = "上传文件接口",notes = "上传文件接口") @ResponseBody public String upload(@RequestParam("file") MultipartFile file){ log.info("/upload POST请求 --> 进行文件上传,参数: " + file.getOriginalFilename()); Response response = new Response(); File uploadFile = null; try { //设置请求头 HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("multipart/form-data"); headers.setContentType(type); //MultipartFile转File uploadFile = CommonUtil.multipartFileToFile(file); //设置请求参数 FileSystemResource fileSystemResource = new FileSystemResource(uploadFile); //设置请求体,注意是LinkedMultiValueMap MultiValueMap<String, Object> form = new LinkedMultiValueMap<>(); form.add("file", fileSystemResource); //封装 HttpEntity<MultiValueMap<String, Object>> send = new HttpEntity<>(form, headers); //发送 response = restTemplate.postForObject(uploadAddress, send, Response.class); } catch (Exception e) { e.printStackTrace(); }finally { //删除临时文件 CommonUtil.deltelTempFile(uploadFile); } //这里自己封装的 根据自己业务返回就行 return response.getCode().equals(ResponseEnum.SUCCESS.getCode()) ? JSON.toJSONString(response) : (String) response.getContent(); } }

提醒一下,应为中间进行转化的时候会生成一个临时文件,temFile在这里就表示生成的临时文件,这里只是相当于一个载体,在最后进行删除就行了

上传服务器的Controller

/** * @description: 文件上传 * @program: fileupload * @author: Mikael * @date: 2021-06-17 14:09 **/ @RestController @Slf4j public class FileUploadController { @Value("${uploadPath}") private String filePath; @Value("${addressPrefix}") private String addressPrefix; @PostMapping("/upload") public Response fileUpload(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return new Response("500","File is empty!"); } String fileName = file.getOriginalFilename(); File dest = new File(filePath + fileName); try { if (!dest.exists()) dest.createNewFile(); file.transferTo(dest); } catch (Exception e) { e.printStackTrace(); return new Response("500","Upload Failed"); } log.info("文件上传到 -->" + filePath + fileName); log.info("公网地址 -->" + addressPrefix + fileName); return new Response("200",addressPrefix+fileName); } }


__EOF__

本文作者Immortal-mode
本文链接https://www.cnblogs.com/immortal-mode/p/14898613.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   immortal_mode  阅读(701)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示