728x90
org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request
NVPair param1 = new NVPair("markerId", "marker01");
NVPair param2 = new NVPair("content", "경기도고양시");
NVPair[] params = [param1, param2];
def data = Codecs.mpFormDataEncode(params, null, headers)
HTTPResponse response = request.POST("http://localhost:8080/api/abc", data);
데아터를 parm 이로 만들어줘서 보냈는데 서버로 전달이 안됐다.
파일이 없는경우
String boundary = "--------------------------" + UUID.randomUUID().toString().replace("-", "")
String body = "--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=\"request\"\r\n" +
"Content-Type: application/json\r\n\r\n" +
new JsonBuilder([
markerId: "marker01",
content: "경기도 고양시"
]).toString() + "\r\n" +
"--" + boundary + "--"
headers = [new NVPair("Content-Type", "multipart/form-data; boundary=" + boundary),new NVPair("Authorization", "key")]
request.setHeaders(headers)
HTTPResponse response = request.POST("http://localhost:8080/api/abc",body.bytes)
파일이 있는경우
String stringData = new JsonBuilder([
markerId: "marker01",
content: "경기도 고양시"
]).toString()
def file = new File("/var/local/images/KakaoTalk_20231012_015153064.jpg");
def fileContent = file.bytes.encodeBase64().toString()
String body = "--" + boundary + "\r\n" +
//이부분 추가
"Content-Disposition: form-data; name=\"images\"; filename=\"${file.name}\"\r\n" +
"Content-Type: image/jpeg\r\n\r\n" +
fileContent + "\r\n" +
"--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=\"request\"\r\n" +
"Content-Type: application/json\r\n\r\n" +
stringData + "\r\n" +
"--" + boundary + "--"
헤더의 순서도 중요!!
"Content-Type", "multipart/form-data; boundary=" + boundary
"Authorization", "key"
1-2 @RequestParam 의 부재
@PostMapping("/api/abc", consumes = ["multipart/form-data"])
fun register(
/*....스크립트의 name 과 value가 파싱된다 name=\"request\"\r\n" +*/
@RequestParam(value = "request", required = false) request: RequestDto,
@RequestParam(value = "audio", required = false) audio : MultipartFile?,
): ..... {
return service.register(request,audio)
}
Multipart/form-data 는 Param 값을 넘겨서 Dto 에 파싱된다
body 로 여러번 시도 했지만 실패했다 ㅜ
ERROR java.util.concurrent.ExecutionException: org.apache.hc.core5.http2.H2StreamResetException: Stream reset (1)
https:// 로 요청을 보내니 요청 시간 자체가 엄청나게 느려졌다
오피셜 질문글에 NGrinder 담당자님의 말씀은 http 로 테스트 하라고 하신다
Http 로 변경하니 완료 !!
NGinx 말고 실제 uri 로 바로 넘겨서 해결했다 > 192.168.xxxx
728x90