npm package: @namatery/multer-minio
Description: A simple storage engine for Multer to upload files on Minio storage.
Author: Alireza Rezapour
Latest version: 1.1.3

<h1>Minio Storage-Engine For Multer</h1>

[![MinIO](https://raw.githubusercontent.com/minio/minio/master/.github/logo.svg?sanitize=true)](https://min.io)

A simple `Storage Engine` for [Minio][MinioGithub] to upload files to Minio at the middleware level with [Multer][MulterGithub]. To write your own `Storage Engine`, check out [this page][MulterStorageEngine].

## How to install

To use this package you can easily install it via _npm_:

```
npm install @namatery/multer-minio
```

## How to use

> **NOTE 1**: _multer-minio_ is just a storage engine for [Multer][MulterGithub], so you need to first install it via [this link][MulterNPM].

> **NOTE 2**: _multer-minio_ needs an instance of the `Client` class to connect to [Minio][MinioGithub]. For more information, see [Minio API Document][MinioAPIDocument].

### MinioStorageEngine

A class that you can import from `@namatery/multer-minio`:

```javascript
const { Client } = require('minio');
const { MinioStorageEngine } = require('@namatery/multer-minio');

const minioClient = new Client({
  port: PORT,
  endPoint: END_POINT,
  accessKey: ACCESS_KEY,
  secretKey: SECRET_KEY,
});

const options = {
  path: '/path/in/bucket',
  region: 'us-east-1',
  bucket: {
    init: true,
    versioning: false,
    forceDelete: false,
  },
  object: {
    name: (req, file) => {
      return `${new Date()}-${file.originalname}`;
    },
    useOriginalFilename: false,
  },
};

const storage = new MinioStorageEngine(minioClient, 'test', options);
```

### Options

| Name                       | Description                                                   | Required | Default   |
| -------------------------- | ------------------------------------------------------------- | -------- | --------- |
| path                       | The path of the file in the bucket.                            | False    | /         |
| region                     | The region where the bucket is created.                       | False    | us-east-1 |
| bucket.init                | If `true`, the bucket is created if it does not exist.        | False    | False     |
| bucket.versioning          | Can be `Enabled` or `Suspended`.                               | False    | False     |
| bucket.forceDelete         | If `true`, objects will be removed even if versioning was enabled. | False    | False     |
| object.name                | Can be `null` or a function that returns the name of the object.  | False    | uuid      |
| object.useOriginalFilename | If `true`, the name of the original file will be used.        | False    | False     |

### Example

Check out [this link][Example] to see a full example:

- [**Expressjs** & **Javascript**][ExpressJavascriptExample]
- [**Expressjs** & **Typescript**][ExpressTypescriptExample]

[comment]: <> (Links)
[MulterMinio]: https://github.com/alireza12prom/multer-minio
[MulterGithub]: https://github.com/expressjs/multer
[MulterNPM]: https://www.npmjs.com/package/multer
[MulterStorageEngine]: https://github.com/expressjs/multer/blob/master/StorageEngine.md
[MinioGithub]: https://github.com/minio/minio
[MinioAPIDocument]: https://min.io/docs/minio/linux/developers/javascript/API.html
[ExpressJavascriptExample]: ./example/express-javascript.js
[ExpressTypescriptExample]: ./example/express-typescript.ts