MultipartUtility class
private final String boundary;
// 개행문자
private static final String LINE_FEED = "\r\n";
// HTTP 관련 기능을 지원하는 URLConnection
// extends URLConnection
// 웹으로 데이터통신위해
private HttpURLConnection httpConn;
// 언어셋
private String charset;
// 데이터 출력을 위한 스트림
private OutputStream outputStream;
// 문자 출력 스트림
private PrintWriter writer;
public MultipartUtility(String requestURL, String charset) throws IOException {
this.charset = charset;
// creates a unique boundary based on time stamp
boundary = "===" + System.currentTimeMillis() + "===";
// 어느 url이랑 할까
//openConnection() 메소드를 사용하여 해당하는 URL에 대해 연결된 클래스인 URLConnection 을 얻을 수 있게 된다.
URL url = new URL(requestURL);
httpConn = (HttpURLConnection) url.openConnection();
// HttpURLConnection은 캐시를 안씀
httpConn.setUseCaches(false);
// OutputStream으로 POST 데이터를 넘겨주겠다는 옵션
// POST 방식은 스트림기반의 데이터통신을 하기때문에 이 같은 설정이 필요하다
httpConn.setDoOutput(true);
// InputStream으로 서버로 부터 응답을 받겠다는 옵션
httpConn.setDoInput(true);
// Request Header값 셋팅
// multipart/form-data 형식을 사용하겠다
httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
// Request Body에 Data를 담기위해 OutputStream 객체를 생성.
outputStream = httpConn.getOutputStream();
writer = new PrintWriter(new OutputStreamWriter(outputStream), true);
}
// name - 필드이름, value - 필드 값
public void addFormField(String name, String value) {
writer.append("--" + boundary).append(LINE_FEED);
writer.append("Content-Disposition: form-data; name=\"" + name + "\"").append(LINE_FEED);
writer.append("Content-Type: text/plain; charset=" + charset).append(LINE_FEED);
writer.append(LINE_FEED);
writer.append(value).append(LINE_FEED);
writer.flush();
}
public List<String> finish() throws IOException {
List<String> response = new ArrayList<String>();
writer.append(LINE_FEED).flush();
writer.append("--" + boundary + "--").append(LINE_FEED);
writer.close();
// checks server's status code first
int status = httpConn.getResponseCode();
if (status == HttpURLConnection.HTTP_OK || status == HttpURLConnection.HTTP_CREATED) {
BufferedReader reader = new BufferedReader(new InputStreamReader(httpConn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
response.add(line);
}
reader.close();
httpConn.disconnect();
} else {
throw new IOException("Server returned non-OK status: " + status);
}
return response;
}
Copy Qualified Name : 경로를 포함하는 이름 복사