드코
2k
2019-05-30 17:52:47
4
224

java 특정 api주소를 요청 시 post로 body에 zip파일첨부하여 요청을 하여야 합니다.



제가 특정 사이트에 파일 업로드를 하는 api를 이용하려고 합니다.
String apiURL="https://요청할 url 주소

	 URL url = new URL(apiURL);
	 HttpURLConnection con = (HttpURLConnection)url.openConnection();
	 con.setDoOutput(true);// 아웃풋으로 데이터를 보내겠다

	 con.setRequestMethod("POST");
	 con.setRequestProperty("Content-Type", "multipart/form-data");

	 
	 OutputStream os= con.getOutputStream();
	 os.write("D:/TEST/test.zip".getBytes()); // 느낌상 이 부분에 해당 보낼 zip파일경로+파일명을 적어주면 해당 url로 zip파일을 보낼 수 있는건가요?

	 os.flush();


0
0
  • 답변 4

  • 배우고싶은이
    736
    2019-05-30 17:57:32

    아뇨.. 문자열을 byte배열 변환한값이 갈겁니다.


    FileInputstream으로 해당 파일 읽으셔서 쓰셔야 합니다.


    apache file io 라이브러리 이용하면 쉽습니다.

    0
  • 드코
    2k
    2019-05-30 18:00:29

    아그럼 (파일경로+파일명)단순 문자열을 보내는것이아니라 해당 위치의 파일을 읽어와서 그 파일을 담은 변수같은것을 저기에 써줘서 보내는 건가요?

    0
  • 배우고싶은이
    736
    2019-05-30 18:01:34

    찾아보니 apache io 의 FileUtils엔 byte[] 리턴해주는 함수가 없네요.. 그냥 FileInputStream으로 해야 하실듯.

    0
  • 드코
    2k
    2019-05-31 17:31:43


    <%@ page import ="java.net.HttpURLConnection" %>
    <%@ page import ="java.net.URL" %>
    <%@ page import="org.apache.http.entity.mime.HttpMultipartMode"%>
    <%@ page import="org.apache.http.entity.mime.MultipartEntity"%>
    <%@ page import ="org.apache.http.entity.mime.content.FileBody" %>
    <%@ page import ="java.io.File"%>
    <%@ page import ="java.io.OutputStream"%>
    <%@ page import ="java.io.BufferedReader" %>
    <%@ page import ="java.io.InputStreamReader" %>


    String apiURL="요청할 URL";
     URL url = new URL(apiURL);
      HttpURLConnection con = (HttpURLConnection)url.openConnection();
      con.setDoOutput(true);
      con.setRequestMethod("POST");
     
     String fileName = "파일경로+파일네임.zip";
     
      FileBody fileBody = new FileBody(new File(fileName));
      MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.STRICT);
      multipartEntity.addPart("file",fileBody);
     
      con.setRequestProperty("Content-Type", multipartEntity.getContentType().getValue());
      OutputStream os = con.getOutputStream();
      multipartEntity.writeTo(os);
      os.close();
     
      int responseCode = con.getResponseCode();
      System.out.println(responseCode);
     
      BufferedReader br;
         if(responseCode==200) { // 정상 호출
             br = new BufferedReader(new InputStreamReader(con.getInputStream()));
         } else {  // 에러 발생
             br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
         }
         String inputLine;
         StringBuffer sb = new StringBuffer();
         while ((inputLine = br.readLine()) != null) {
          sb.append(inputLine);
         }
         br.close();
         System.out.println(sb.toString()); //요청결과가 담겨있음
      con.disconnect();


    해당 소스로 성공 하였습니다.


    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.