时间:2021-05-20
一、配置文件解析器
服务提供者和消费者都需要配置文件解析器,这里使用 commons-fileupload 替换原有的解析器:
依赖:
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version></dependency>注入 bean :
@Bean(name = "multipartResolver")public MultipartResolver mutipartResolver(){ CommonsMultipartResolver com = new CommonsMultipartResolver(); com.setDefaultEncoding("utf-8"); return com;}程序入口中剔除原有的解析器:
@SpringBootApplication(exclude = {MultipartAutoConfiguration.class})二、服务提供者,即接收文件一方的配置
Controller 的写法:
@ResponseBody@RequestMapping(value = "/upload", method = {RequestMethod.POST}, produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)public Result<String> uploadFile(@RequestPart("file")MultipartFile file,@RequestParam("id")Long id){ String fileName = file.getOriginalFilename(); String extend = FileOperateUtil.suffix(fileName); FileOperateUtil.copy("E:\\" + fileName, file); return ResultBuilder.success("ok");}@RequestPart 指定文件,后面的 @RequestParam 是额外参数,注意额外参数不能超过url长度限制。
三、服务消费者配置
依赖:
<dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form-spring</artifactId> <version>3.2.2</version></dependency><dependency> <groupId>io.github.openfeign.form</groupId> <artifactId>feign-form</artifactId> <version>3.2.2</version></dependency>文件编码配置:
import feign.codec.Encoder;import feign.form.spring.SpringFormEncoder;import org.springframework.beans.factory.ObjectFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.web.HttpMessageConverters;import org.springframework.cloud.netflix.feign.support.SpringEncoder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class MultipartSupportConfig{ @Autowired private ObjectFactory<HttpMessageConverters> messageConverters; @Bean public Encoder feignFormEncoder(){ return new SpringFormEncoder(new SpringEncoder(messageConverters)); }}Feign 接口定义:
@FeignClient(name = "test-upload")public interface UploadService{ @ResponseBody @RequestMapping(value = "/upload", method = {RequestMethod.POST}, produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) Result<String>uploadFile(@RequestPart("file")MultipartFile file,@RequestParam("id")Long id);}与普通 Feign 接口写法差不多,注意方法注解和参数与服务提供者的 controller 一样。
Controller 的写法, Controller 中接收前端传过来的文件信息和额外参数,然后通过 Feign 接口传输到远端:
// 注入 feign 接口@Autowiredprivate UploadService uploadService;@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = "application/json; charset=utf-8")@ResponseBodypublic Result<String> testUpload(HttpServletRequest request, Long id){ Result<String> result = null; MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = mRequest.getFileMap(); for (MultipartFile mFile : fileMap.values()) { String fileName = mFile.getOriginalFilename(); result = uploadService.uploadFile(mFile, id); } return result;}四、总结
最后梳理一下流程,服务消费者接收前端(如浏览器)传过来的文件,但是并不进行业务处理,然后通过 Feign 调用接口,把文件传给服务提供者,服务提供者拿到文件后,进行相应的业务处理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Spring-cloud-eureka使用feign调用服务接口的具体方法,供大家参考,具体内容如下基于spring-boot2.0以上版本完成的微服务架构po
一、TFTP(TrivialFileTransferProtocol,简单文件传输协议或称小型文件传输协议)是一种简化的文件传输协议,于1980年定义,TCP/
FTP是Internet上常用的一种文件传输协议,长期以来,通过FTP进行文件传输是Internet文件传输的主要方法之一,超文本传输协议HTT字书能够用于传输
本文实例为大家分享了python实现UDP文件传输的具体代码,供大家参考,具体内容如下UDP协议下文件传输:服务端importsocketcount=0s=so
前言sFTP(安全文件传输程序)是一种安全的交互式文件传输程序,其工作方式与FTP(文件传输协议)类似。然而,sFTP比FTP更安全;它通过加密SSH传输处理所