feign 마이크로 서비스 간 파일 업로드 오류 해결

A.마이크로 서비스 가 B 서 비 스 를 호출 하 는 업로드 파일 인터페이스 오류:
the request was rejected because no multipart boundary was found
spring cloud 버 전 H

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>Hoxton.SR8</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
만약 feign 을 사용한다 면 openfeign 의 의존 도 를 도입 했다 고 믿 습 니 다.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
서비스 공급 자 인터페이스:

//           
@PostMapping(value = " /file/upload")
public ResultModel<FileInfo> fileUpload(@RequestParam("access_token") String accessToken, @RequestParam("file") MultipartFile file) {
    //            
    FileInfo fileInfo = fileInfoService.uploadFile(file);
    return ResultModel.ok(fileInfo);
}
소비자 인터페이스:

@Component
@FeignClient(value = "file-server")
public interface FileInfoFeignService {
    @PostMapping(value = "/file/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResultModel<FileInfo> fileUpload(@RequestParam("access_token") String accessToken, @RequestPart("file") MultipartFile file);
}
반드시

consumes = MediaType.MULTIPART_FORM_DATA_VALUE
MultipartFile file 앞의 주 해 는@RequestPart 여야 합 니 다.
소비자 컨트롤 러 클래스:

//         
@PostMapping(value = "/fileUpload")
public ResultModel<FileInfo> fileUpload(@RequestParam("access_token") String accessToken, @RequestPart("file") MultipartFile file) {
    return fileInfoFeignService.fileUpload(accessToken, file);
}
이렇게 하면 완성!
자신 이 여러 번 테스트 를 해 보 았 는데,다른 블 로그 들 이 엉망진창 으로 쓴 것 같 았 다.
feign 업로드 파일 구덩이 밟 기 및 해결
feign 을 통 해 파일 서비스 제공 자 인 터 페 이 스 를 호출 할 때 파일 file 을 전송 해 야 합 니 다.서비스 호출 자 는 가끔 오 류 를 보고 할 수 있 습 니 다.
feign.FeignException$BadRequest: status 400 reading
在这里插入图片描述
서비스 제공 자 는 Required request part'file'is not present 오 류 를 보고 합 니 다.
이 는 서비스 호출 자 MultipartFile 의 value 가 서비스 제공 자@RequestPart 의 value 값 과 다 르 기 때 문 입 니 다.
서비스 호출 자 MultipartFile 의 value 는 서비스 제공 자의@RequestPart 의 value 값 과 같 아야 합 니 다.안 그러면 400 이상 던 져!!

예시
서비스 호출 자

@PostMapping("/xxx/file")
public xx uploadOrderFilesToOSS(@ApiParam("  ") @RequestParam("file") MultipartFile[] file) {
   return xxxService.uploadOrderFilesToOSS(file);
}
Feign

@PostMapping(value = "/file", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
xxx uploadSigleFile(@RequestParam("path") String path, @RequestPart("file") MultipartFile file);
서비스 공급 자

@PostMapping(value = "/file", produces = {MediaType.APPLICATION_JSON_UTF8_VALUE}, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public xxx uploadSigleFile(@RequestParam("path") String path, @RequestPart("file") MultipartFile file) {
  return fileService.uploadFileToOSS(path, file);
}
다음 코드 를 통 해 요청 파 라미 터 를 볼 수 있 습 니 다

Collection<Part> parts = request.getParts();
logger.info(JSONObject.toJSONString(parts, true));
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기