or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

content-body-types.mdform-part-customization.mdindex.mdmultipart-entity-building.md
tile.json

tessl/maven-org-apache-httpcomponents--httpmime

Apache HttpComponents HttpClient MIME multipart entity support for handling multipart/form-data requests and file uploads

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.apache.httpcomponents/httpmime@4.5.x

To install, run

npx @tessl/cli install tessl/maven-org-apache-httpcomponents--httpmime@4.5.0

index.mddocs/

Apache HttpComponents HttpMime

Apache HttpComponents HttpMime provides comprehensive support for MIME multipart encoded entities and form-based file uploads for the Apache HttpClient library. It enables developers to handle multipart/form-data requests, file uploads, and complex form submissions in HTTP client applications with efficient memory management and streaming capabilities.

Package Information

  • Package Name: org.apache.httpcomponents:httpmime
  • Package Type: maven
  • Language: Java
  • Installation: Add to your Maven dependencies:
    <dependency>
      <groupId>org.apache.httpcomponents</groupId>
      <artifactId>httpmime</artifactId>
      <version>4.5.14</version>
    </dependency>

Core Imports

import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.FormBodyPartBuilder;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.entity.mime.content.InputStreamBody;
import org.apache.http.HttpEntity;

Basic Usage

import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.HttpEntity;
import org.apache.http.entity.ContentType;
import java.io.File;

// Simple form with text fields
HttpEntity entity = MultipartEntityBuilder.create()
    .addTextBody("username", "john_doe")
    .addTextBody("description", "User profile update")
    .build();

// File upload with form data
HttpEntity fileUploadEntity = MultipartEntityBuilder.create()
    .addBinaryBody("file", new File("document.pdf"), 
                   ContentType.APPLICATION_PDF, "document.pdf")
    .addTextBody("title", "Important Document")
    .addTextBody("category", "reports")
    .build();

// Mixed content with different body types
byte[] imageData = // ... image bytes
HttpEntity mixedEntity = MultipartEntityBuilder.create()
    .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
    .addTextBody("description", "Profile image")
    .addBinaryBody("avatar", imageData, ContentType.IMAGE_JPEG, "avatar.jpg")
    .addBinaryBody("document", new File("resume.pdf"))
    .build();

Architecture

HttpMime is built around several key components:

  • MultipartEntityBuilder: Main fluent API for creating multipart entities with chainable method calls
  • Content Bodies: Specialized implementations for different data types (text, files, byte arrays, streams)
  • Form Parts: Individual multipart sections with headers and content
  • Multipart Modes: Different encoding standards (strict RFC compliance, browser compatibility, Unicode support)
  • Streaming Support: Efficient handling of large files and data without loading everything into memory

Capabilities

Multipart Entity Building

Core functionality for creating multipart HTTP entities using a fluent builder pattern. Essential for file uploads and complex form submissions.

public class MultipartEntityBuilder {
    public static MultipartEntityBuilder create();
    public MultipartEntityBuilder setMode(HttpMultipartMode mode);
    public MultipartEntityBuilder addTextBody(String name, String text);
    public MultipartEntityBuilder addBinaryBody(String name, File file);
    public HttpEntity build();
}

Multipart Entity Building

Content Body Types

Different content body implementations for handling various data types in multipart forms, from simple text to binary files and streams.

public interface ContentBody extends ContentDescriptor {
    String getFilename();
    void writeTo(OutputStream out) throws IOException;
}

public class StringBody extends AbstractContentBody {
    public StringBody(String text, ContentType contentType);
}

public class FileBody extends AbstractContentBody {
    public FileBody(File file, ContentType contentType, String filename);
}

Content Body Types

Form Part Customization

Advanced form part creation with custom headers and fine-grained control over multipart section properties.

public class FormBodyPartBuilder {
    public static FormBodyPartBuilder create(String name, ContentBody body);
    public FormBodyPartBuilder addField(String name, String value);
    public FormBodyPart build();
}

public class FormBodyPart {
    public String getName();
    public ContentBody getBody();
    public Header getHeader();
}

Form Part Customization

Types

public enum HttpMultipartMode {
    /** RFC 822, RFC 2045, RFC 2046 compliant */
    STRICT,
    /** Browser-compatible mode, only write Content-Disposition; use content charset */
    BROWSER_COMPATIBLE,
    /** RFC 6532 compliant */
    RFC6532
}

public interface ContentDescriptor {
    String getMimeType();
    String getMediaType();
    String getSubType(); 
    String getCharset();
    String getTransferEncoding();
    long getContentLength();
}

public class Header {
    public void addField(MinimalField field);
    public MinimalField getField(String name);
    public List<MinimalField> getFields();
    public List<MinimalField> getFields(String name);
    public int removeFields(String name);
    public void setField(MinimalField field);
    public Iterator<MinimalField> iterator();
}

public class MinimalField {
    public MinimalField(String name, String value);
    public String getName();
    public String getBody();
}