반응형
스프링 부트json 본문의 일부로 멀티파트 파일 업로드
다중 파트 파일 및 기타 데이터가 포함된 json 페이로드를 허용할 수 있는 게시물 끝점이 있는지 알고 싶습니다. 예를 들어, 내 본문 개체는 다음과 같습니다.
public class Bio {
private Long id;
private String firstName;
private MultipartFile imageFile;
}
별도의 관련 질문은 파일 업로드를 위한 springboot doc 예제에서 https://spring.io/guides/gs/uploading-files/, 파일이 페이로드가 아닌 요청 경로의 일부라는 것입니다.제가 보기에 이상한데 요청 본문에 파일을 바인딩할 수 있는 방법이 있나요?
제가 예전에 했던 방법은 파일용과 첨부된 JSON용으로 두 부분을 따로 업로드하는 것입니다.컨트롤러 방법은 다음과 같습니다.
public void create(@RequestPart("foo") Foo foo,
@RequestPart("image") MultipartFile image)
// …
}
그러면 다음과 같은 요청이 사용됩니다.
Content-Type: multipart/mixed; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name="foo"
Content-Type: application/json;charset=UTF-8
{"a":"alpha","b":"bravo"}
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm
Content-Disposition: form-data; name="image"; filename="foo.png"
Content-Type: application/octet-stream
Content-Length: 734003
<binary data>
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm--
@RequestPart를 사용하는 Andy의 솔루션은 완벽하게 작동했습니다.그러나 우체부가 답변에 설명된 바와 같이 경계를 적절하게 설정하기 위해 각 멀티파트의 콘텐츠 유형을 지정하는 것을 지원하지 않는 것처럼 보이기 때문에 우체부와 검증할 수 없습니다.
curl 명령을 사용하여 payload와 파일을 모두 첨부하려면 다음과 같은 작업을 수행할 수 있습니다.
curl -i -X POST -H "Content-Type: multipart/mixed" \
-F "somepayload={\"name\":\"mypayloadname\"};type=application/json" \
-F "uploadfile=@somevalid.zip" http://localhost:8080/url
페이로드 내용과 유효한 내용을 이스케이프해야 합니다.zip은 curl이 실행되는 동일한 디렉토리에 있거나 파일에 대한 유효한 경로로 대체해야 합니다.
언급URL : https://stackoverflow.com/questions/28179251/spring-boot-multipart-file-upload-as-part-of-json-body
반응형
'programing' 카테고리의 다른 글
엑셀 vba를 이용한 유튜브 자막 다운로드 (0) | 2023.08.24 |
---|---|
DataTable을 클래스 Object로 변환하는 방법은 무엇입니까? (0) | 2023.08.24 |
PowerShell 노트 속성이란? (0) | 2023.08.24 |
iOS 흰색에서 투명 그라데이션 계층은 회색입니다. (0) | 2023.08.24 |
JSON 파일을 변환할 때 "Invalid JSON 프리미티브" 오류가 발생함 (0) | 2023.08.24 |