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
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);
}
}