Skip to content

MinIO (S3-Compatible Storage)

DieselEngine includes a MinIO client for S3-compatible object storage. Use it for file uploads, downloads, and encrypted storage.

Getting the Service

javascript
const minio = diesel.getMinIOService();

Connection

Connect to a MinIO (or any S3-compatible) server:

javascript
minio.connect("http://localhost:9000", "minioadmin", "minioadmin");

In Docker Compose, use the service name:

javascript
minio.connect("http://minio:9000", "minioadmin", "minioadmin");

TIP

Connect to MinIO in a startup script so the connection is available for all subsequent scripts.

Buckets

minio.ensureBucketExists(bucketName)

Create a bucket if it doesn't already exist.

  • Parameters: bucketName: string
javascript
minio.ensureBucketExists("uploads");
minio.ensureBucketExists("backups");

File Operations

minio.uploadFile(bucket, objectName, sourceFilePath)

Upload a file from the host filesystem.

  • Parameters: bucket: string, objectName: string, sourceFilePath: string
javascript
minio.uploadFile("uploads", "reports/q1-2026.pdf", "/tmp/report.pdf");

minio.deleteFile(bucket, objectName)

Delete an object from a bucket.

  • Parameters: bucket: string, objectName: string
javascript
minio.deleteFile("uploads", "old-data/archive.zip");

Stream Operations

minio.uploadStream(bucket, objectName, stream, objectSize, partSize)

Upload from an InputStream.

  • Parameters:
    • bucket: string
    • objectName: string
    • stream: InputStream
    • objectSize: number — total size in bytes
    • partSize: number — multipart upload part size
javascript
const ByteArrayInputStream = Java.type('java.io.ByteArrayInputStream');
const content = new java.lang.String("file content").getBytes();
const stream = new ByteArrayInputStream(content);

minio.uploadStream("uploads", "data.txt", stream, content.length, 5242880);

Encrypted Upload / Download

For sensitive data, use the encrypted variants that handle client-side encryption:

minio.uploadAndEncryptStream(bucket, objectName, stream, objectSize, partSize, key)

Upload with client-side encryption.

  • Parameters: same as uploadStream plus key: string — encryption key
javascript
minio.uploadAndEncryptStream(
  "secure",
  "confidential/data.bin",
  inputStream,
  dataSize,
  5242880,
  encryptionKey
);

minio.downloadAndDecryptStream(bucket, objectName, key)

Download and decrypt an encrypted object.

  • Parameters: bucket: string, objectName: string, key: string
  • Returns: InputStream
javascript
const decrypted = minio.downloadAndDecryptStream(
  "secure",
  "confidential/data.bin",
  encryptionKey
);

minio.downloadAndDecryptToFile(bucket, objectName, key, destinationFilePath)

Download, decrypt, and write to a file on the host filesystem.

  • Parameters: bucket: string, objectName: string, key: string, destinationFilePath: string
javascript
minio.downloadAndDecryptToFile(
  "secure",
  "confidential/data.bin",
  encryptionKey,
  "/tmp/decrypted-data.bin"
);

Advanced: Raw Client

minio.getClient()

Get the underlying MinIO Java client for operations not covered by the convenience methods.

  • Returns: MinioClient
javascript
const client = minio.getClient();
// Use the full MinIO Java SDK API

Common Patterns

Upload from HTTP Request

javascript
export function handleRequest(context) {
  const iterator = context.getFileItemIterator();

  while (iterator.hasNext()) {
    const item = iterator.next();
    if (!item.isFormField()) {
      const stream = item.openStream();
      const objectName = "uploads/" + diesel.randomUUID() + "-" + item.getName();

      minio.uploadStream("uploads", objectName, stream, -1, 5242880);

      return Results.json().renderRaw(JSON.stringify({
        uploaded: true,
        path: objectName
      }));
    }
  }

  return Results.badRequest().json().renderRaw(
    JSON.stringify({ error: "No file provided" })
  );
}

Startup Connection

javascript
// /startup/connect_minio.js
const minio = diesel.getMinIOService();
minio.connect("http://minio:9000", "minioadmin", "minioadmin");
minio.ensureBucketExists("uploads");
minio.ensureBucketExists("exports");
minio.ensureBucketExists("secure");
console.log("MinIO connected, buckets ready");

API Reference

MethodDescription
minio.connect(endpoint, accessKey, secretKey)Connect to MinIO server
minio.ensureBucketExists(bucket)Create bucket if missing
minio.uploadFile(bucket, object, sourcePath)Upload a file
minio.uploadStream(bucket, object, stream, size, partSize)Upload from stream
minio.uploadAndEncryptStream(bucket, object, stream, size, partSize, key)Encrypted upload
minio.downloadAndDecryptStream(bucket, object, key)Encrypted download (stream)
minio.downloadAndDecryptToFile(bucket, object, key, destPath)Encrypted download (file)
minio.deleteFile(bucket, object)Delete an object
minio.getClient()Get raw MinIO client

DieselEngine Scripting Documentation