MultiValueMap으로 파일 다른 service로 post 전송

Status
Publishing
Created By
Empty
Last Edited Time
7/13/2020, 3:37:00 PM
Description
multipart/form-data로 다른 서비스에 파일 전송, getOriginalFilename() 한글 깨짐 처리
Tags
Java
text.txt 파일을 전송하는 경우
흐름은 아래와 같다.
송신 부분
@PostMapping("/") public String uploadFile(@RequestParam("file") MultipartFile file, Model model) { MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>(); try { ByteArrayResource fileResource = new ByteArrayResource(file.getBytes()) { /* 이 부분을 제외하고 parts.add(new ByteArrayResource(file.getBytes()))만 하면 전송 시 400 null 에러가 출력됨 */ @Override public String getFilename() { /* 한글 파일 이름 처리 */ try { return URLEncoder.encode("한글.txt", "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return ""; } }; parts.add("file", fileResource); } catch (IOException e) { e.printStackTrace(); } HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(parts, headers); ResponseEntity<String> response = fileUploadClient.postForEntity("<http://localhost:6000/>", requestEntity, String.class); if (response != null && response.getBody() != null) { return "sueccess"; } return "error"; }
Java
수신 부분
@PostMapping("/") /* @RequestParam 를 제외할 시 500 null 에러 출력 */ public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) { /* getOriginalFilename() 함수 uRLDecoder.decode로 감싸주어 한글 파일 이름 처리 */ System.out.println("filename: " + file.getName() + ", original filename:" + URLDecoder.decode(file.getOriginalFilename(), "utf-8")); /* file.getInputStream()를 이용하여 파일 저장 */ ... return new ResponseEntity<String>("OK", HttpStatus.OK); }
Java