ОШИБКА: при загрузке файла с использованием openfeign запрос был отклонен, так как не было найдено многокомпонентной границы - PullRequest
2 голосов
/ 28 февраля 2020

Я пытался использовать шаблон rest, он работает нормально, а также пытался загрузить файл через почтальона.

В почтальоне все работает правильно без заголовков. С заголовками в почтальоне это не работает.

То же самое, когда я копируюсь в openfeign, удаляя заголовки. теперь ошибка изменилась. Текущий файл не является Multiform eoor.

OpenFeignClient:

@PostMapping(value = "/api/secured/save/details", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    @Headers("multipart/form-data")
    public ResponseEntity<Upload> uploadFile(@RequestHeader("X-Authorization-Firebase") String xAuth,
            @RequestParam(value = "file", required = true) MultipartFile file, @RequestParam String path,
            @RequestParam String fileName, @RequestParam String documentType, @RequestParam String explanation,
            @RequestParam boolean authorityOnly);

Контроллер

@PostMapping("/save/details")
    public ResponseEntity<Upload> handleFileUpload(@RequestHeader("X-Authorization-Firebase") String xAuth,@RequestParam("file") MultipartFile file, @RequestParam String path, @RequestParam String fileName) {

        if (dataroomService.hasAccess(xAuth, path)) {
            try {
                Upload upload = dataroomService.saveFile(xAuth, file, path,fileName,explanation, documentType,authorityOnly);
                return ResponseEntity.accepted().body(upload);
            } catch (IOException e) {
                LOG.error("Failed to upload file on S3: {}", e.getMessage());
                return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);
            }
        } else {
            LOG.info(ACCESS_DENIED);
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(null);
        }
    }

Загруженный код:

String xAuth = ""jsonToken";
FileItem fileItem = new DiskFileItem("file", Files.probeContentType(file.toPath()), false, file.getName(),(int) file.length(), file.getParentFile());
InputStream input = new FileInputStream(file);
OutputStream os = fileItem.getOutputStream();
IOUtils.copy(input, os);
MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
dataroomClient.uploadFile(xAuth,file,path,fileName,documentType,explanation,true);

Ошибка у меня

>  ERROR 9934 --- [nio-8748-exec-9]
> o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for
> servlet [dispatcherServlet] in context with path [] threw exception
> [Request processing failed; nested exception is
> org.springframework.web.multipart.MultipartException: Failed to parse
> multipart servlet request; nested exception is java.io.IOException:
> org.apache.tomcat.util.http.fileupload.FileUploadException: the
> request was rejected because no multipart boundary was found] with
> root cause
> 
> org.apache.tomcat.util.http.fileupload.FileUploadException: the
> request was rejected because no multipart boundary was found  at
> org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:834)
> ~[tomcat-embed-core-9.0.27.jar:9.0.27]
...