programing

멀티파트예외:현재 요청이 다중 부품 요청이 아닙니다.

telecom 2023. 9. 7. 21:30
반응형

멀티파트예외:현재 요청이 다중 부품 요청이 아닙니다.

저는 파일 업로드를 위해 휴식형 컨트롤러를 만들려고 합니다.나는 이것을 보고 이 컨트롤러를 만들었습니다.

@RestController
public class MaterialController {

    @RequestMapping(value="/upload", method= RequestMethod.POST)
    public String handleFileUpload(
            @RequestParam("file") MultipartFile file){
        String name = "test11";
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream =
                        new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
                stream.write(bytes);
                stream.close();
                return "You successfully uploaded " + name + " into " + name + "-uploaded !";
            } catch (Exception e) {
                return "You failed to upload " + name + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload " + name + " because the file was empty.";
        }
    }
}

그리고 집배원을 이용해서 pdf를 보냈습니다.

enter image description here

그러나 서버가 충돌하고 다음 오류가 발생합니다.

.MultipartException: Current request is not a multipart request

다시 한번 이것을 찾았고, 추가했습니다.bean.xml파일

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="multipartResolver"
          class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    </bean>
</beans>

유감스럽게도 여전히 같은 오류를 호소하고 있습니다.

여러 파트 요청에 대해 우편배달부를 사용할 경우 헤더에 사용자 정의 내용 유형을 지정하지 마십시오.따라서 포스트맨의 헤더 탭은 비어 있어야 합니다.우체부가 양식-데이터 경계를 결정합니다.Postman의 Body 탭에서 Form-data를 선택하고 file type을 선택해야 합니다.관련 토론은 https://github.com/postmanlabs/postman-app-support/issues/576 에서 확인할 수 있습니다.

서버로의 요청이 여러 부분으로 이루어진 요청이 아닌 것이 문제인 것 같습니다.기본적으로 고객측 양식을 수정해야 합니다.예를 들어,

<form action="..." method="post" enctype="multipart/form-data">
  <input type="file" name="file" />
</form>

도움이 되길 바랍니다.

저 또한 같은 문제에 직면해 있었습니다.Postman위해서multipart. 다음 단계를 수행하여 수정했습니다.

  • 선택 안 함Content-Type에서Headers부분.
  • Body의 탭Postman당신은 선택해야 합니다.form-data선택합니다.file type.

그것은 나에게 효과가 있었다.

예전에 그런 일이 있었어요. 저는 완벽하게 작동하는 포스트맨 구성을 가지고 있었지만, 아무것도 바꾸지 않고, 비록 제가 그 사실을 알리지 않았음에도 불구하고 말이죠.Content-Type포스트맨에서 수동으로 작동이 멈췄습니다. 이 질문에 대한 답에 따라, 저는 헤더를 비활성화하는 것과 포스트맨이 자동으로 추가하도록 하는 것 둘 다 시도했지만, 둘 다 작동하지 않았습니다.

저는 결국에 가서 해결했습니다.Body탭, 매개 변수 유형 변경File로.Text, 그 다음에 다시File파일을 다시 저장하여 전송할 수 있습니다. 어찌된 일인지 다시 작동하게 되었습니다.포스트맨 벌레 냄새가 나요 그 특정한 경우엔?

application.properties에서 다음을 추가하십시오.

spring.servlet.multipart.max-file-size=128KB
spring.servlet.multipart.max-request-size=128KB
spring.http.multipart.enabled=false

그리고 html 형태로 당신은 다음이 필요합니다.enctype="multipart/form-data". 예를 들어,

<form method="POST" enctype="multipart/form-data" action="/">

도움이 되길 바랍니다!

요청에서 선택한 파일을 확인합니다.

저는 다른 기계에서 요청을 가져온 것처럼 파일이 시스템에 존재하지 않아 오류가 발생했습니다.

제 경우에는 제거했습니다.

'Content-Type': 'application/json',

인터셉터로 부터 모든 것이 효과가 있습니다.

     intercept(httpRequest: HttpRequest<any>, httpHandler: HttpHandler): Observable<HttpEvent<any>> {
if (this.authService.isUserLoggedIn() && httpRequest.url.indexOf('login') === -1) {
  const authReq = httpRequest.clone({
    headers: new HttpHeaders({
    'Content-Type': 'application/json',
      Authorization: this.authService.getBasicAuth()
    })
  });
  return httpHandler.handle(authReq);
} else {
  return httpHandler.handle(httpRequest);
}}

매핑에 소비 = {MULTIPART_FORM_DATA_VALUE}을(를) 추가해야 합니다.전체 예제:

@PostMapping(path = "/{idDocument}/attachments", consumes = {MULTIPART_FORM_DATA_VALUE})
ResponseEntity<String> addAttachmentsToDocumentForm(@PathVariable Long idDocument, @RequestParam("file") MultipartFile[] files){
    documentService.addAttachments(idDocument, files);
    return ok("your response");
}

enter image description here

 @PostMapping("/upload")
  public ResponseEntity<ResponseMessage> uploadFile(@RequestParam("file") MultipartFile uploadFile) {
    String message = "";
    try {
        service.save(uploadFile);

      message = "Uploaded the file successfully: " + uploadFile.getOriginalFilename();
      return ResponseEntity.status(HttpStatus.OK).body(new ResponseMessage(message));
    } catch (Exception e) {
      message = "Could not upload the file: " + uploadFile.getOriginalFilename() + "!";
      return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(new ResponseMessage(message));
    }
  }

ARCclient에서 - 지정하여 ARC(advanced rest client) - 와 하여 시킵니다 시킵니다 하여 와 Content-Type multipart/form-data(이는 헤더 이름 및 헤더 값입니다) REST 사양에 따라 필드 이름을 지금 지정할 수 있는 키 및 값으로 폼 데이터를 추가하고 파일 선택기에서 업로드할 파일을 선택할 수 있습니다.

맞춤법 오류로 같은 문제가 발생했습니다. "multipart/form-data" 철자를 잘못 입력하여 이 예외를 수정했습니다. 현재 요청은 다중 부품 요청 클라이언트 측 오류가 아니므로 양식을 확인하십시오.

나는 이 문제에 직면하고 있었지만 그것은 내가 우체부에 업로드하고 있던 파일이 우체부 작업 디렉토리에 없었기 때문이었습니다. 설정으로 이동 -> 일반으로 이동하고 위치로 스크롤하여 위치 폴더를 찾고 거기에 업로드할 파일을 넣었습니다.

참조: 포트만 작업 디렉토리 설정

매개 변수 @RequestParam(필수 = false, 값 = "file") MultipartFile 파일을 사용하여 required=files를 추가합니다.

언급URL : https://stackoverflow.com/questions/42013087/multipartexception-current-request-is-not-a-multipart-request

반응형