Spring Cloud Feign 파일 전송의 예제 코드
서비스 제공자와 소비자는 모두 파일 해상도를 설정해야 합니다. 여기에서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 호출 인터페이스를 통해 파일을 서비스 제공자에게 전송하고 서비스 제공자가 파일을 받은 후에 해당하는 업무 처리를 한다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.