2017-02-09 3 views
2

파일을 수신하는 스프링 부트에서 편안한 웹 서비스를 작성했습니다. 우리는 웹 서비스에 대한 클라이언트 측 자바 코드에서 파일을 업로드 수있는 방법스프링 부트 클라이언트 측 Java 코드를 사용하는 다중 파일 업로드

@RequestMapping(value = "/upload", method = RequestMethod.POST) 
@ResponseBody 
public void uploadFile(@RequestParam("file") MultipartFile uploadfile) { 
    System.out.println("filename: " + uploadfile.getName()); 
} 

. AJAX 호출이나 HTML 페이지 양식 다중 요청 대신에?

아래 코드는 JSON 객체로 웹 서비스를 호출합니다. 이와 같이 위의 웹 서비스에서 파일을 수신하려고합니다. 당신이 MultipartFile 사용하려는 경우 요청시

void clientRequest(String server_url, JSONObject fileObj){ 

    try { 

    URL url = new URL(server_url); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setDoOutput(true); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Content-Type", "application/json"); 

    OutputStream os = conn.getOutputStream(); 
    os.write(fileObj.toString().getBytes()); 
    os.flush(); 

    BufferedReader br = new BufferedReader(new InputStreamReader(
      (conn.getInputStream()))); 

    String output; 
    System.out.println("Output from Server .... \n"); 
    while ((output = br.readLine()) != null) { 
     logger.info("output :: " + output); 
    } 

    conn.disconnect(); 

    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 

답변

0

, 당신은 multipart/form-data MIME 유형을 사용해야합니다. 요청 엔터티로 JSON을 보내는 대신, 단일 필드 file이있는 특정 multipart-entity를 구성해야합니다. 여기, How can I make a multipart/form-data POST request using Java?

+0

코드는 작동하지 않습니다. 나는 이미 그것을 피곤했다. 대부분의 메소드는 더 이상 사용되지 않습니다. –

+0

이 코드에는 4.3 버전의'http-client'에 대한 업데이트 된 답변이 들어 있습니다. –

+0

http-client에 지쳐서 고맙습니다. 4.3 이전에 작동하지 않았습니다. –

1

당신은 봄의 HttpEntityByteArrayResource과 함께 파일을 업로드하는 데 사용할 수있는 예는 다음과 같습니다 :

이것은 한 방법이다 링크에 주어진

MultiValueMap<String, Object> data = new LinkedMultiValueMap<String, Object>(); 
ByteArrayResource resource = new ByteArrayResource(file.getBytes()) { 
    @Override 
    public String getFilename() { 
     return file.getName(); 
    } 
}; 
data.add("file", resource); 

HttpHeaders requestHeaders = new HttpHeaders(); 
requestHeaders.setContentType(MediaType.MULTIPART_FORM_DATA); 

HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(data, requestHeaders); 

final ResponseEntity<<SomeClass>> responseEntity = restTemplate.exchange(<url>, 
     HttpMethod.POST, requestEntity, new ParameterizedTypeReference<SomeClass>(){}); 

SomeClass result = responseEntity.getBody();