0.8.0 • Published 4 years ago

@tsrt/mparty-aws v0.8.0

Weekly downloads
6
License
MIT
Repository
github
Last release
4 years ago

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.

0.8.0

4 years ago

0.7.5

4 years ago

0.7.4

4 years ago

0.7.0

4 years ago

0.6.1

4 years ago

0.6.0

4 years ago

0.5.0

5 years ago

0.4.3

5 years ago

0.4.1

5 years ago

0.3.2

5 years ago

0.4.0

5 years ago

0.3.0

5 years ago

0.2.3

5 years ago

0.2.1

5 years ago

0.2.0

5 years ago