TIL_11

-·2021년 2월 24일
0

TIL

목록 보기
12/15

MultipartUtility 만들어서 multipart/form-data 전송 구현

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 : 경로를 포함하는 이름 복사

profile
거북이는 오늘도 걷는다

0개의 댓글