mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-13 03:10:31 +00:00
56 lines
1.8 KiB
TypeScript
56 lines
1.8 KiB
TypeScript
import multer from 'multer';
|
|
import type { Multer } from 'multer';
|
|
import multerS3 from 'multer-s3';
|
|
import { s3 } from '@/lib/S3/S3';
|
|
import { Service } from 'typedi';
|
|
import config from '@/config';
|
|
import { NextFunction, Request, Response } from 'express';
|
|
|
|
@Service()
|
|
export class AttachmentUploadPipeline {
|
|
/**
|
|
* Middleware to ensure that S3 configuration is properly set before proceeding.
|
|
* This function checks if the necessary S3 configuration keys are present and throws an error if any are missing.
|
|
*
|
|
* @param req The HTTP request object.
|
|
* @param res The HTTP response object.
|
|
* @param next The callback to pass control to the next middleware function.
|
|
*/
|
|
public validateS3Configured(req: Request, res: Response, next: NextFunction) {
|
|
if (
|
|
!config.s3.region ||
|
|
!config.s3.accessKeyId ||
|
|
!config.s3.secretAccessKey
|
|
) {
|
|
const missingKeys = [];
|
|
if (!config.s3.region) missingKeys.push('region');
|
|
if (!config.s3.accessKeyId) missingKeys.push('accessKeyId');
|
|
if (!config.s3.secretAccessKey) missingKeys.push('secretAccessKey');
|
|
const missing = missingKeys.join(', ');
|
|
|
|
throw new Error(`S3 configuration error: Missing ${missing}`);
|
|
}
|
|
next();
|
|
}
|
|
|
|
/**
|
|
* Express middleware for uploading attachments to an S3 bucket.
|
|
* It utilizes the multer middleware for handling multipart/form-data, specifically for file uploads.
|
|
*/
|
|
public uploadPipeline(): Multer {
|
|
return multer({
|
|
storage: multerS3({
|
|
s3,
|
|
bucket: config.s3.bucket,
|
|
contentType: multerS3.AUTO_CONTENT_TYPE,
|
|
metadata: function (req, file, cb) {
|
|
cb(null, { fieldName: file.fieldname });
|
|
},
|
|
key: function (req, file, cb) {
|
|
cb(null, Date.now().toString());
|
|
},
|
|
}),
|
|
});
|
|
}
|
|
}
|