Sample code for 30+ languages & platforms
Java

REST Stream Multipart Body from File

See more REST Examples

Demonstrates how to send a multipart/form-data HTTP request, where one of the parts contains data streamed directly from a file. This is good for cases where the file to be uploaded is very large.

Chilkat Java Downloads

Chilkat2 Java
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.Rest;
import com.chilkatsoft.chilkat2.Stream;
import com.chilkatsoft.chilkat2.StringBuilder;

public class ChilkatExample {

    public static void main(String[] args) {
        // This example requires the Chilkat API to have been previously unlocked.
        // See Global Unlock Sample for sample code.

        Rest rest = new Rest();

        // Connect to the destination web server.
        boolean bTls = true;
        int port = 443;
        boolean bAutoReconnect = true;
        rest.connect("www.somewebserver.com", port, bTls, bAutoReconnect);

        // This example will send the following multipart/form-data request.
        // The Content-Length is automatically computed and added by Chilkat.

        //     POST /some_path HTTP/1.1
        //     Content-Type: multipart/form-data; boundary=---------------------------735323031399963166993862150
        //     Content-Length: 834
        //
        //     -----------------------------735323031399963166993862150
        //     Content-Disposition: form-data; name="text1"
        //
        //     text 123 abc
        //     -----------------------------735323031399963166993862150
        //     Content-Disposition: form-data; name="text2"
        //
        //     xyz
        //     -----------------------------735323031399963166993862150
        //     Content-Disposition: form-data; name="file1"; filename="a.txt"
        //     Content-Type: text/plain
        //
        //     Content of a.txt.
        //
        //     -----------------------------735323031399963166993862150
        //     Content-Disposition: form-data; name="file2"; filename="a.html"
        //     Content-Type: text/html
        //
        //     <!DOCTYPE html><title>Content of a.html.</title>
        //
        //     -----------------------------735323031399963166993862150
        //     Content-Disposition: form-data; name="file3"; filename="starfish.jpg"
        //     Content-Type: image/jpeg
        //
        //     binary data goes here
        //     -----------------------------735323031399963166993862150--

        // Set the Content-Type for the topmost MIME part.
        rest.addHeader("Content-Type", "multipart/form-data");

        // Specify each part of the request.
        rest.setPartSelector("1");
        rest.addHeader("Content-Disposition", "form-data; name=\"text1\"");
        rest.setMultipartBodyString("text 123 abc");

        rest.setPartSelector("2");
        rest.addHeader("Content-Disposition", "form-data; name=\"text2\"");
        rest.setMultipartBodyString("xyz");

        rest.setPartSelector("3");
        rest.addHeader("Content-Disposition", "form-data; name=\"file1\"; filename=\"a.txt\"");
        rest.addHeader("Content-Type", "text/plain");
        rest.setMultipartBodyString("Content of a.txt.");

        rest.setPartSelector("4");
        rest.addHeader("Content-Disposition", "form-data; name=\"file2\"; filename=\"a.html\"");
        rest.addHeader("Content-Type", "text/html");
        StringBuilder sbHtml = new StringBuilder();
        sbHtml.loadFile("qa_data/html/a.html", "utf-8");
        rest.setMultipartBodySb(sbHtml);

        rest.setPartSelector("5");
        rest.addHeader("Content-Disposition", "form-data; name=\"file3\"; filename=\"starfish.jpg\"");
        rest.addHeader("Content-Type", "image/jpeg");

        // When the request is sent, stream this part directly from the file.
        // This avoids having to load the entire file into memory.
        Stream fileStream = new Stream();
        fileStream.setSourceFile("qa_data/jpg/starfish.jpg");
        rest.setMultipartBodyStream(fileStream);

        String responseBody;
        try {
            responseBody = rest.fullRequestMultipart("POST", "/some_path");
        } catch (ChilkatException e) {
            System.out.println(e.getLastErrorText());
            return;
        }

        // ...
        // ...

        // Clear the REST object for any subsequent requests..
        rest.clearAllHeaders();
        rest.clearAllParts();
        rest.setPartSelector("");
    }
}