1.2.2 • Published 2 years ago

mtr-storage v1.2.2

Weekly downloads
-
License
-
Repository
-
Last release
2 years ago

Storage Library

Dependency

Library ini menggunakan package multer v1.4.1 dan request-promise v4.2.2

Installation

npm i git+ssh://git@repository.meteor.asia/mtr-platform/libs/storage#v1.2.2

Penggunaan

Simpan konfigurasi service API pada file .env.
Nama service yang menggunakan disimpan dalam SVC_NAME
dan Datastore Service API dalam SVC_DATASTORE.

SVC_NAME=svc_name
SVC_DATASTORE=http://datastore.meteor.test:80

Untuk router middleware

const { multipartMiddleware } = require('mtr-storage');

router.post('/propic', multipartMiddleware([{ name: 'propic', maxCount: 1 }]), (req, res) => {
  console.log(req.files.propic[0]);
  /* or use this if your node support es6 */
  const [file] = req.files.propic;
  console.log(file);
});

Implementasi dengan Validation Formatter Library

const { checkBody } = require('mtr-validator');

checkBody(req, {
  propic: {
    notEmpty: true,
    isMimeType: ['image/jpeg', 'image/png'],
    isMaxFile: 2000000,
  },
});

Upload file ke DataStore

uploadUpdate(file: required File, fileName: required String, pathName: required String, uploadWithNewName: default:false Bool, bucketName: optional String)
  • upload function ke datastore Minio
  • jika fileName tidak kosong dan uploadWithNewName true, maka akan upload file dengan nama baru dan melakukan delete pada file sebelumnya
  • jika fileName tidak kosong dan uploadWithNewName false, maka akan upload file dengan meng-replace file sebelumnya
try {
  const filename = await uploadUpdate(file, fileName, pathName, uploadWithNewName, bucketName)
    .catch(() => {
      throw new Error('Failed update profile picture');
    });

  console.log(filename);
} catch (error) {
  console.log(error);
}
uploadCreate(file: required File, fileName: required String, pathName: required String, bucketName: optional String)
  • upload function ke datastore Minio
  • jika fileName tidak kosong maka akan upload file baru dengan tambahan suffix jumlah duplikat di filename, ex: yourfilename_2.jpg
try {
  const filename = await uploadCreate(file, fileName, pathName, bucketName)
    .catch(() => {
      throw new Error('Failed update profile picture');
    });

  console.log(filename);
} catch (error) {
  console.log(error);
}
uploadOSS(file: required File, fileName: required String, pathName: required String, bucketName: optional String, replace: optional Boolean, uploadWithNewName: optional Boolean)
  • upload function ke datastore OSS Alicloud
  • jika fileName tidak kosong maka akan upload file baru dengan tambahan suffix jumlah duplikat di filename, ex: yourfilename_2.jpg
  • jika replace bernilai true, maka fitur upload akan menghapus file pada OSS dengan nilai fileName yg sama, default bernilai false. fitur replace hanya akan berjalan apabila argumen uploadWithNewName bernilai True.
try {
  const filename = await uploadOSS(file, fileName, pathName, bucketName)
    .catch(() => {
      throw new Error('Failed update profile picture');
    });

  console.log(filename);
} catch (error) {
  console.log(error);
}

API

checkMiddleware(fields)

Untuk meng-handle multipart form dan memasukkan file dari request ke dalam req.files.
Selain itu, API ini juga menambahkan object metadata ke dalam req.body untuk pemggunaan pada lib validation.

ParamJenisKeterangan
fieldsArrayArray yang berisi daftar file.

upload(upload(file: FileUpload, fileName?: string))

Upload Buffer ke Datastore server.

ParamJenisKeterangan
fileObjectObject files dari multipartMiddleware.
fileNamestringNama file yang akan digunakan dalam storage.
  Jika kosong maka akan dibuatkan secara otomatis. Misal: '/assets/face.png'
pathNamestringPath yang akan digunakan untuk menyimpan file
replacebooleanJika true, maka akan menimpa file yang sudah ada

delete file DataStore

deleteFile(fileName: required String, pathName: required String, bucketName: optional String)
try {
  const filename = await deleteFile(fileName, bucketName)
    .catch(() => {
      throw new Error('Failed update profile picture');
    });

  console.log(filename);
} catch (error) {
  console.log(error);
}