Appearance
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: stringobjectName: stringstream: InputStreamobjectSize: number— total size in bytespartSize: 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
uploadStreampluskey: 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 APICommon 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
| Method | Description |
|---|---|
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 |