Skip to main content

2025-01-08

Quote

“Erii: ‘We’re all little monsters, and one day we’ll be killed by the righteous Ultraman.’” — Dragon Raja · Sun Huo


application/octet-stream

application/octet-stream is a MIME type (Multipurpose Internet Mail Extensions) used to represent a binary data stream, i.e., arbitrary binary data without a more specific subtype.

Characteristics

  1. Universality

    • It serves as a default content type, commonly used when transmitting files or raw data.
    • If the file type is unknown, both clients and servers may default to application/octet-stream.
  2. Non-Specificity

    • The data can be anything—images, videos, documents, executables, etc.
    • The MIME type itself does not convey any information about the precise format of the content.
  3. Common Uses

    • File Download: When a server does not know a file’s specific MIME type, it can send it as application/octet-stream to prompt the browser to download rather than display.
    • Binary Upload: When a client uploads raw, unencoded binary data (e.g., an image or audio file), it may indicate it with this content type.

Typical Scenarios

1. File Download

A server sending an unknown file type might use:

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="example.bin"

This forces the browser to present a “Save as…” dialog instead of trying to open the file inline.

2. File Upload

A client can upload arbitrary binary data by setting the request header:

POST /upload HTTP/1.1
Content-Type: application/octet-stream
Content-Length: 123456

<binary data here>

Comparison with Other MIME Types

  • application/json: Structured JSON data, easily parsed.
  • text/plain: Plain text, human-readable.
  • application/octet-stream: Unstructured binary data, format-agnostic.

Handling in Spring

If your Spring application needs to consume application/octet-stream, you can do so in two common ways:

  1. Receive as byte[] Map the request body directly to a byte array:

    @PostMapping(value = "/upload", consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
    public ResponseEntity<String> uploadBinary(@RequestBody byte[] data) {
    // Process the binary data
    return ResponseEntity.ok("Data received successfully");
    }
  2. Multipart File Upload If you’re using form-based file uploads, switch to multipart/form-data and use MultipartFile:

    @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseEntity<String> uploadFile(@RequestPart("file") MultipartFile file) {
    // Handle the uploaded file
    return ResponseEntity.ok("File uploaded successfully");
    }

When to Use

Use application/octet-stream for:

  • File transfers (download or upload) when the exact format is unknown.
  • Arbitrary data streams without a predefined structure.
  • Fallback when no more specific MIME type applies.

If your data has a known structure (e.g., JSON, XML), choose a more specific MIME type to improve clarity and enable automated parsing.