热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

SpringCloud使用Feign文件上传、下载

这篇文章主要为大家详细介绍了SpringCloud使用Feign文件上传、下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

文件上传、下载也是实际项目中会遇到的场景,本篇我们介绍下springcloud中如何使用feign进行文件上传与下载。

还是使用feign 进行http的调用。

一、Feign文件上传

服务提供方java代码:

/**
 * 文件上传
 * @param file 文件 
 * @param fileType 
 * @return
 */
@RequestMapping(method = RequestMethod.POST, value = "/uploadFile",
  produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},
  cOnsumes= MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadFile(@RequestPart(value = "file") MultipartFile file,
  @RequestParam(value = "fileType") String fileType,
  HttpServletRequest request,HttpServletResponse response) {
 System.out.println("fileType:"+fileType);
 long size= file.getSize();
 String cOntentType= file.getContentType();
 String name = file.getName();
 String orgFilename= file.getOriginalFilename(); 
 System.out.println("size:"+size);
 System.out.println("contentType:"+contentType);
 System.out.println("name:"+name);
 System.out.println("orgFilename:"+orgFilename);
  
 String suffix = orgFilename.substring(orgFilename.lastIndexOf("."));//后缀
  
 String uuid =UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
  
 File dest = new File("f:/b13/"+uuid+suffix);
  try {
  file.transferTo(dest);
   
  return dest.getCanonicalPath();//文件的绝对路径
 } catch (IllegalStateException | IOException e) {
  e.printStackTrace();
 }
  return "failure";
}

服务提供方Feign api接口:

@RequestMapping(method = RequestMethod.POST, value = "/uploadFile",
   produces = {MediaType.APPLICATION_JSON_UTF8_VALUE},
   cOnsumes= MediaType.MULTIPART_FORM_DATA_VALUE)
 public String uploadFile(@RequestPart(value = "file") MultipartFile file, @RequestParam(value = "fileType") String fileType);

服务消费方:

pom.xml 


 
  io.github.openfeign.form
  feign-form
  3.0.3
  
 
  io.github.openfeign.form
  feign-form-spring
  3.0.3

java代码:

@Autowired
private UserProControllerApi userProControllerApi;
 
 
 @ResponseBody
 @RequestMapping("/user_uploadFile")
 public Object user_uploadFile(HttpServletRequest request,HttpServletResponse response,
   @RequestPart(value = "file") MultipartFile file, String fileType) {
 
  System.out.println(fileType);
  
  return userProControllerApi.uploadFile(file, fileType);
}

MultipartSupportConfig.java

@Configuration
public class MultipartSupportConfig {
  
  
 @Autowired
 private ObjectFactory messageConverters;
  
 
 @Bean
 @Primary
 @Scope("prototype")
 public Encoder feignEncoder() {
   return new SpringFormEncoder(new SpringEncoder(messageConverters));
 }
  
  @Bean
  public feign.Logger.Level multipartLoggerLevel() {
   return feign.Logger.Level.FULL;
  }
 
}

二、Feign文件下载

服务提供方java代码:

/**
  * 文件(二进制数据)下载
  * @param fileType 文件类型
  * @return
  */
  @RequestMapping("/downloadFile")
  public ResponseEntity downloadFile(String fileType,HttpServletRequest request ){
   
   System.out.println(request.getParameter("fileType"));
   System.out.println("参数fileType: "+fileType);
   
   HttpHeaders headers = new HttpHeaders();
   ResponseEntity entity = null;
   InputStream in=null;
   try {
   in=new FileInputStream(new File("d:/myImg/001.png"));
    
   byte[] bytes = new byte[in.available()];
    
   String imageName="001.png";
   
   //处理IE下载文件的中文名称乱码的问题
   String header = request.getHeader("User-Agent").toUpperCase();
   if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {
    imageName = URLEncoder.encode(imageName, "utf-8");
    imageName = imageName.replace("+", "%20"); //IE下载文件名空格变+号问题
   } else {
    imageName = new String(imageName.getBytes(), "iso-8859-1");
   }
    
   in.read(bytes);
   
   headers.add("Content-Disposition", "attachment;filename="+imageName);
    
   entity = new ResponseEntity(bytes, headers, HttpStatus.OK);
   
  } catch (Exception e) {
   e.printStackTrace();
  }finally {
   if(in!=null) {
    try {
     in.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }
   
   return entity;
 }

服务提供方feign api接口 

@RequestMapping("/downloadFile")
  public ResponseEntity downloadFile(@RequestParam(value = "fileType") String fileType
    );

服务消费方

@ResponseBody
  @RequestMapping("/user_downloadFile")
  public Object user_downloadFile(HttpServletRequest request,HttpServletResponse response,
    String fileType) {
   ResponseEntity entity = userProControllerApi.downloadFile(fileType);
   System.out.println( entity.getStatusCode());
   return entity ;
}

注:实际项目中如果上传的文件太大,可以使用ftp服务器保存上传的文件,直接在controller端调用ftp接口即可。

如果下载的文件太大,则调用service端接口可返回一个ftp文件资源路径,然后在controller端调用ftp下载文件即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • Python安全实践:Web安全与SQL注入防御
    本文旨在介绍Web安全的基础知识,特别是如何使用Python和相关工具来识别和防止SQL注入攻击。通过实际案例分析,帮助读者理解SQL注入的危害,并掌握有效的防御策略。 ... [详细]
  • 深入解析 Git 代码提交流程及常见问题处理
    本文详细阐述了使用 Git 进行代码提交的具体步骤,并提供了遇到常见问题时的解决方案,旨在帮助开发者更加高效地管理代码。 ... [详细]
  • 本文介绍了如何使用 Git 命令来忽略那些已经提交或者从远程仓库拉取但在本地进行了修改的文件,避免这些文件在不必要的时候被再次提交。 ... [详细]
  • 本文探讨了在Qt框架下实现TCP多线程服务器端的方法,解决了一个常见的问题:服务器端仅能与最后一个连接的客户端通信。通过继承QThread类并利用socketDescriptor标识符,实现了多个客户端与服务器端的同时通信。 ... [详细]
  • Web3隐私协议Manta Network与区块链互操作性平台Axelar达成战略合作,共同推进跨链资产的隐私保护。 ... [详细]
  • 本文详细介绍了如何利用go-zero框架从需求分析到最终部署至Kubernetes的全过程,特别聚焦于微服务架构中的网关设计与实现。项目采用了go-zero及其生态组件,涵盖了从API设计到RPC调用,再到生产环境下的监控与维护等多方面内容。 ... [详细]
  • 本文详细介绍了如何在不同操作系统中设置 Node.js 的环境变量,包括通过命令行、npm 脚本以及直接在代码中设置的方法。 ... [详细]
  • 匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上)
    匠心|传统_2021年度总结 | 葡萄城软件开发技术回顾(上) ... [详细]
  • Android开发经验分享:优化用户体验的关键因素
    随着Android市场的不断扩展,用户对于移动应用的期望也在不断提高。本文探讨了在Android开发中如何优化用户体验,以及为何用户体验的重要性超过了技术本身。 ... [详细]
  • 随着物联网技术的快速发展,NB-IoT(窄带物联网)作为一项关键的技术,正逐步成为实现大规模设备互联的重要手段。本文将详细介绍NB-IoT技术的特点、应用场景及其在实际项目中的应用实例。 ... [详细]
  • 本文介绍了如何通过源码编译和PECL命令来升级Swoole扩展,详细记录了可能遇到的问题及解决方案。 ... [详细]
  • 本文详细解析了在使用Git进行代码推送时常见的两个错误——'fetch first'和'non-fast-forward',并提供了有效的解决方案。通过理解这些错误背后的原因,开发者可以更加高效地管理代码版本。 ... [详细]
  • 图神经网络模型综述
    本文综述了图神经网络(Graph Neural Networks, GNN)的发展,从传统的数据存储模型转向图和动态模型,探讨了模型中的显性和隐性结构,并详细介绍了GNN的关键组件及其应用。 ... [详细]
  • 本文提供了详细的步骤,指导用户如何下载并安装 Git 的中文语言包,以提升用户体验。 ... [详细]
author-avatar
Kira玄玄
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有