README.md

April 25, 2026 ยท View on GitHub

Nest Logo

Minio Module for Nest framework

NPM Version Package License NPM Downloads

Buy Me A Coffee

Description

This's a nest-minio module for Nest. This quickstart guide will show you how to install the client SDK and execute an example JavaScript program. For a complete list of APIs and examples, please take a look at the JavaScript Client API Reference documentation.

This document assumes that you have a working nodejs setup in place.

Installation

$ npm i --save nestjs-minio

Initialize MinIO Client

You need five items in order to connect to MinIO object storage server.

ParamsDescription
endPointURL to object storage service.
portTCP/IP port number. This input is optional. Default value set to 80 for HTTP and 443 for HTTPs.
accessKeyAccess key is like user ID that uniquely identifies your account.
secretKeySecret key is the password to your account.
useSSLSet this value to 'true' to enable secure (HTTPS) access

Provide the credentials for minio module by importing it as :

import { Module } from '@nestjs/common';
import { NestMinioClientController } from './nest-minio-client.controller';
import { NestMinioModule } from '../nest-minio.module';

@Module({
	controllers: [NestMinioClientController],
	imports: [
		NestMinioModule.register({
			isGlobal: true,
			endPoint: 'play.min.io',
			port: 9000,
			useSSL: true,
			accessKey: 'Q3AM3UQ867SPQQA43P2F',
			secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG',
		}),
	],
})
export class NestMinioClientModule {}

Then you can use it in the controller or service by injecting it in the controller as:


 constructor(@Inject(MINIO_CONNECTION) private readonly minioClient) {}

Multiple Clients In One Module

You can register multiple MinIO clients by importing NestMinioModule.register(...) multiple times and assigning a unique name to each client.

import { Module } from '@nestjs/common';
import { NestMinioModule } from 'nestjs-minio';

@Module({
  imports: [
    NestMinioModule.register({
      name: 'uploads',
      endPoint: 'localhost',
      port: 9000,
      useSSL: false,
      accessKey: 'test',
      secretKey: 'test1234',
    }),
    NestMinioModule.register({
      name: 'archive',
      endPoint: 'localhost',
      port: 9001,
      useSSL: false,
      accessKey: 'archive-user',
      secretKey: 'archive-pass',
    }),
  ],
})
export class StorageModule {}

Inject named clients using the decorator:

import { Controller } from '@nestjs/common';
import { Client } from 'minio';
import { InjectMinio } from 'nestjs-minio';

@Controller()
export class FilesController {
  constructor(
    @InjectMinio('uploads') private readonly uploadsClient: Client,
    @InjectMinio('archive') private readonly archiveClient: Client,
  ) {}
}

Connection Teardown

NestMinioService exposes manual teardown methods so applications can proactively close MinIO connections during graceful shutdown:

import { Injectable } from '@nestjs/common';
import { NestMinioService } from 'nestjs-minio';

@Injectable()
export class ShutdownService {
  constructor(private readonly minioService: NestMinioService) {}

  async closeMinio(): Promise<void> {
    await this.minioService.disconnect();
    // Aliases: close() and destroy()
  }
}

The module also performs this cleanup automatically on application shutdown.

Quick Start Example - File Uploader

This example program connects to an object storage server, makes a bucket on the server and then uploads a file to the bucket.

We will use the MinIO server running at https://play.min.io in this example. Feel free to use this service for testing and development. Access credentials shown in this example are open to the public.


import { Controller, Get, Inject } from '@nestjs/common';
import { MINIO_CONNECTION } from '../constants';
import {Client, InjectMinio} from 'minio';

@Controller()
export class NestMinioClientController {
 // use inject token
  constructor(@Inject(MINIO_CONNECTION) private readonly minioClient: Client) {}

  // or use inject decorator
  // constructor(@InjectMinio() private readonly minioClient: Client) {}

  @Get()
  index() {
    const file = '/tmp/app.zip';

    const metaData = {
      'Content-Type': 'application/octet-stream',
      'X-Amz-Meta-Testing': 1234,
      example: 5678,
    };
    // Using fPutObject API upload your file to the bucket europetrip.
    this.minioClient.fPutObject(
      'europetripxxx3',
      'app.zip',
      file,
      metaData,
      function(err, etag) {
        if (err) {
          return console.log(err);
        }
        console.log('File uploaded successfully.');
      },
    );
  }
}