Implementing a Basic Media Server with Java REST Endpoints

A media server manages storage, organization, and delivery of digital media assets. Java provides a robust foundation for building such systems, offering features for network communication and file handling. This example outlines a core architectural model for a server and demonstrates fundamental file operations using RESTful web services.

Typical media server components include:

  • Data Storage: Media file repositories, such as databases or file systems.
  • Asset Management: Capabilities for uploading, retrieving, and modifying media.
  • Media Delivery: Protocols like HTTP or RTMP for streaming files to clients.
  • Access Control: Systems to enforce user permissions on media resources.

A minimal implementation focuses on two primary operations: ingesting files from clients and serving them for download.

File Upload Endpoint

The following JAX-RS resource receives a file via an HTTP POST request and saves it to the server.

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.*;

@Path("/media")
public class MediaResourceHandler {
    private static final String STORAGE_PATH = "/server/storage/uploaded_content.dat";

    @POST
    @Path("/ingest")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response storeMediaAsset(InputStream incomingData) {
        try (FileOutputStream fileOut = new FileOutputStream(STORAGE_PATH)) {
            byte[] dataChunk = new byte[4096];
            int bytesRead;
            while ((bytesRead = incomingData.read(dataChunk)) != -1) {
                fileOut.write(dataChunk, 0, bytesRead);
            }
            return Response.ok("Media asset stored successfully.").build();
        } catch (IOException e) {
            return Response.serverError().entity("Failed to store media asset.").build();
        }
    }
}

File Download Ednpoint

This endpoint handles GET requests to retrieve and download the stored file.

import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import java.io.*;

@Path("/media")
public class MediaResourceHandler {
    private static final String STORAGE_PATH = "/server/storage/uploaded_content.dat";

    @GET
    @Path("/retrieve")
    public Response fetchMediaAsset() {
        File mediaFile = new File(STORAGE_PATH);
        if (!mediaFile.exists()) {
            return Response.status(Response.Status.NOT_FOUND).entity("Media asset not found.").build();
        }

        StreamingOutput outputStream = output -> {
            try (FileInputStream fileIn = new FileInputStream(mediaFile)) {
                byte[] buffer = new byte[8192];
                int bytesCopied;
                while ((bytesCopied = fileIn.read(buffer)) != -1) {
                    output.write(buffer, 0, bytesCopied);
                }
            }
        };

        return Response
                .ok(outputStream, "application/octet-stream")
                .header("Content-Disposition", "attachment; filename=\"downloaded_media.dat\"")
                .build();
    }
}

Tags: java Media Server REST API File Upload File Download

Posted on Sun, 28 Jun 2026 18:00:11 +0000 by HuggieBear