Multipart Overview with java

ydh077·2020년 12월 22일
0
  • RFC(공식)

    • 구버젼(원초적)
      • https://www.ietf.org/rfc/rfc2046.txt
      • https://www.ietf.org/rfc/rfc2388.txt
      • https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
    • 비교적 최신
      • https://tools.ietf.org/html/rfc7578#section-4.1
      • https://tools.ietf.org/html/rfc3986#section-2
        최신에서 다음은 사용하지 않음.
        Content-Transfer-Encoding Deprecated
  • 먼저 구버젼 살펴보면..
    w3.org에서 다음과 같은 형식을 보여준다.

    위의 예시에 가장 기본적인 것이다.
    Text data와 file이 공존시의 예시.(파일에게는 part Content Type과 파일 Name이 추가된다.

    여기 예시에서 여러 파일을 받을 경우를 상정하는듯 하다.
    이때 여러 파일들의 Sub Content Type : mixed이며, 새로운 boundary를 행한다.

  • 없어진것?
    Content-Transfer-Encoding Deprecated 그리고 아래의 사진

    해석해보자면, 3가지 이외에는 그 어떤 Content- 시작하는 것은 와서는 안되며, 무시할 것으로 예상.

  • wikipedia

    • 기초적인 부분으로서 해당 형식이 다음과 같음을 알린다.
    • https://ko.wikipedia.org/wiki/MIME
  • java example / Boundary Example with apache MultipartEntityBuilder

    • multipartEntitybuilder class와 ContentType.class한번 다시 코드 소스 봐보면 해석을 할 수 있는 수준이다.
package test;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;

import org.apache.commons.io.IOUtils;
import org.apache.http.HeaderElement;
import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;

public class testHttpEntityBuilder {
	public static void main(String[] args) throws UnsupportedOperationException, IOException {
		
		MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
		entityBuilder.setContentType(ContentType.create("multipart/mixed"));
		entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
		// apache method의 addPart이후에 붙여지는   Setcharset과 setcontentType은 의미가 없다.
		entityBuilder.addTextBody("name", "text", ContentType.create("text/plain", "utf-8"));
		entityBuilder.addTextBody("name2", "{\"what\":\"text2\"}", ContentType.APPLICATION_JSON);
		File file = new File("./src/main/resource/csvFile/multipleDataWithHeader.csv");
//		FileBody filebody = new FileBody(file, ContentType.APPLICATION_OCTET_STREAM, "fileName");
		FileBody filebody = new FileBody(file);
		entityBuilder.addPart("file", filebody);
		HttpEntity reqEntity = entityBuilder.build();
		
		
		for(HeaderElement header :reqEntity.getContentType().getElements()) {
			System.out.println(header.getName() + "  " + header.getValue());
		}
		String body = IOUtils.toString(reqEntity.getContent(), Charset.defaultCharset());
		System.out.println(body);
	}
}
profile
Record My daily life. Then, feedback yourself.

0개의 댓글