@tsrt/mparty-aws
TypeScript icon, indicating that this package has built-in type declarations

0.8.0 • Public • Published

Typescript Reusable Tools: Mparty AWS S3 Adapter

npm version GitHub license Size Downloads

An Mparty AWS S3 Adapter.

Internally uses aws-sdk for managing file uploading / deletion. Thus all aws-sdk S3 config and upload config options are available for AwsAdapter as well.

Usage

For example express middleware:

import { Request, Response, Next } from 'express';

export async function uploadMiddleware(req: Request, res: Response, next: Next): Promise<void> {
  try {
    const adapter = new AwsAdapter({
      config: { credentials: { accessKeyId: 'accessKeyId', secretAccessKey: 'secretAccessKey' } }, 
      uploadOptions: { Bucket: 'Bucket' },
    });

    const fileNameFactory: FileNameFactory = (_req, _file, { originalFileName }) => `tenantSubDir/${Date.now()}_${originalFileName}`;

    const mparty = new Mparty({ adapter, fileNameFactory });
    const { fields, files, file } = mparty.upload(req);

    req.body = fields;
    req.files = files;
    req.file = file;

    next();
  } catch (err) {
    next(err);
  }
}
... or for multi-tenant system

Same example:

import { Request, Response, Next } from 'express';
import { SomeTenantService } from '@lib/services';

export async function uploadMiddleware(req: Request, res: Response, next: Next): Promise<void> {
  try {
    const { accessKeyId, secretAccessKey, Bucket, tenantSubDir } = await SomeTenantService.getTenantAwsConfigFromRequest(req);

    const adapter = new AwsAdapter({
      config: { credentials: { accessKeyId, secretAccessKey } }, 
      uploadOptions: { Bucket },
    });

    const fileNameFactory: FileNameFactory = (_req, _file, { originalFileName }) => `${tenantSubDir}/${Date.now()}_${originalFileName}`;

    const mparty = new Mparty({ adapter, fileNameFactory });
    const { fields, files, file } = mparty.upload(req);

    req.body = fields;
    req.files = files;
    req.file = file;

    next();
  } catch (err) {
    next(err);
  }
}

License

This project is licensed under the terms of the MIT license.

Package Sidebar

Install

npm i @tsrt/mparty-aws

Weekly Downloads

0

Version

0.8.0

License

MIT

Unpacked Size

9.91 kB

Total Files

6

Last publish

Collaborators

  • mopc