All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.shib.java.lib.restiny.MultipartUtility Maven / Gradle / Ivy

package me.shib.java.lib.restiny;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

final class MultipartUtility {

    private static final String LINE_FEED = "\r\n";
    private static final String userAgent = "Mozilla/5.0";

    private final String boundary;
    private HttpURLConnection httpConn;
    private String charset;
    private OutputStream outputStream;
    private PrintWriter writer;

    protected MultipartUtility(String requestURL, String charset, String boundary) throws IOException {
        this.charset = charset;
        this.boundary = boundary;

        URL url = new URL(requestURL);
        httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setDoOutput(true);
        httpConn.setDoInput(true);
        httpConn.setChunkedStreamingMode(0);
        httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
        httpConn.setRequestProperty("User-Agent", userAgent);
        outputStream = httpConn.getOutputStream();
        writer = new PrintWriter(new OutputStreamWriter(outputStream, charset), true);
    }

    protected void setRequestProperty(String key, String value) {
        httpConn.setRequestProperty(key, value);
    }

    protected void addFormField(String name, String value) {
        writer.append("--").append(boundary).append(LINE_FEED)
                .append("Content-Disposition: form-data; name=\"")
                .append(name).append("\"").append(LINE_FEED)
                .append("Content-Type: text/plain; charset=")
                .append(charset).append(LINE_FEED)
                .append(LINE_FEED).append(value).append(LINE_FEED);
        writer.flush();
    }

    protected void addFilePart(String fieldName, File uploadFile) throws IOException {
        String fileName = uploadFile.getName();
        FileInputStream inputStream = new FileInputStream(uploadFile);
        addFilePart(fieldName, inputStream, fileName);
    }

    private void addFilePart(String fieldName, InputStream inputStream, String fileName) throws IOException {
        writer.append("--").append(boundary).append(LINE_FEED)
                .append("Content-Disposition: form-data; name=\"")
                .append(fieldName).append("\"; filename=\"")
                .append(fileName).append("\"").append(LINE_FEED).append("Content-Type: ")
                .append(URLConnection.guessContentTypeFromName(fileName))
                .append(LINE_FEED).append("Content-Transfer-Encoding: binary")
                .append(LINE_FEED).append(LINE_FEED);
        writer.flush();

        byte[] buffer = new byte[4096];
        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        outputStream.flush();
        inputStream.close();

        writer.append(LINE_FEED);
        writer.flush();
    }

    protected HttpURLConnection execute() throws IOException {
        writer.append("--").append(boundary).append("--").append(LINE_FEED);
        writer.close();
        return httpConn;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy