Spring Cloud Feign 파일 전송의 예제 코드

1. 프로필 분석기 구성
서비스 제공자와 소비자는 모두 파일 해상도를 설정해야 합니다. 여기에서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})
2. 서비스 제공자, 즉 파일을 받는 측의 설정
Controller Write:

@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 길이 제한을 초과해서는 안 됩니다.
3. 서비스 소비자 설정
의존:

<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;

@Configuration
public 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  
@Autowired
private UploadService uploadService;

@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = "application/json; charset=utf-8")
@ResponseBody
public 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;
}

4. 총결산
마지막으로 절차를 정리하고 서비스 소비자는 전단(예를 들어 브라우저)에서 전송된 파일을 수신하지만 업무 처리를 하지 않는다. 그리고 Feign 호출 인터페이스를 통해 파일을 서비스 제공자에게 전송하고 서비스 제공자가 파일을 받은 후에 해당하는 업무 처리를 한다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기