diff --git a/src/main/java/io/github/lumijiez/core/http/HttpContentType.java b/src/main/java/io/github/lumijiez/core/http/HttpContentType.java new file mode 100644 index 0000000..cd46605 --- /dev/null +++ b/src/main/java/io/github/lumijiez/core/http/HttpContentType.java @@ -0,0 +1,28 @@ +package io.github.lumijiez.core.http; + +public enum HttpContentType { + TEXT_PLAIN("text/plain"), + APPLICATION_JSON("application/json"), + APPLICATION_XML("application/xml"), + MULTIPART_FORM_DATA("multipart/form-data"), + APPLICATION_FORM_URLENCODED("application/x-www-form-urlencoded"); + + private final String value; + + HttpContentType(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static HttpContentType fromString(String value) { + for (HttpContentType type : values()) { + if (type.value.equalsIgnoreCase(value)) { + return type; + } + } + return TEXT_PLAIN; + } +} diff --git a/src/main/java/io/github/lumijiez/core/http/HttpMultipartParser.java b/src/main/java/io/github/lumijiez/core/http/HttpMultipartParser.java new file mode 100644 index 0000000..60c5dc8 --- /dev/null +++ b/src/main/java/io/github/lumijiez/core/http/HttpMultipartParser.java @@ -0,0 +1,62 @@ +package io.github.lumijiez.core.http; + +import java.io.BufferedReader; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public class HttpMultipartParser { + private final String boundary; + private final BufferedReader reader; + private final Map parts = new HashMap<>(); + + public HttpMultipartParser(BufferedReader reader, String contentType) { + this.reader = reader; + this.boundary = extractBoundary(contentType); + } + + private String extractBoundary(String contentType) { + String[] parts = contentType.split(";"); + for (String part : parts) { + if (part.trim().startsWith("boundary=")) { + return "--" + part.split("=")[1].trim(); + } + } + return null; + } + + public Map parse() throws IOException { + String line; + StringBuilder content = new StringBuilder(); + String currentName = null; + + while ((line = reader.readLine()) != null) { + if (line.startsWith(boundary)) { + if (currentName != null) { + parts.put(currentName, content.toString().trim()); + content = new StringBuilder(); + } + + while ((line = reader.readLine()) != null && !line.isEmpty()) { + if (line.toLowerCase().startsWith("content-disposition:")) { + currentName = extractFieldName(line); + } + } + } else if (!line.equals(boundary + "--")) { + content.append(line).append("\n"); + } + } + + return parts; + } + + private String extractFieldName(String header) { + String[] parts = header.split(";"); + for (String part : parts) { + if (part.trim().startsWith("name=")) { + return part.split("=")[1].trim().replace("\"", ""); + } + } + return null; + } +}