minio
This commit is contained in:
1708
package-lock.json
generated
1708
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -20,7 +20,9 @@
|
||||
"test:e2e": "jest --config ./test/jest-e2e.json"
|
||||
},
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-s3": "^3.1008.0",
|
||||
"@nestjs/common": "^11.0.1",
|
||||
"@nestjs/config": "^4.0.3",
|
||||
"@nestjs/core": "^11.0.1",
|
||||
"@nestjs/platform-express": "^11.0.1",
|
||||
"puppeteer-core": "^24.39.0",
|
||||
|
||||
@@ -2,9 +2,18 @@ import { Module } from '@nestjs/common';
|
||||
import { AppController } from './app.controller';
|
||||
import { AppService } from './app.service';
|
||||
import { PdfModule } from './pdf/pdf.module';
|
||||
import { StorageModule } from './storage/storage.module';
|
||||
import { ConfigModule } from '@nestjs/config';
|
||||
|
||||
@Module({
|
||||
imports: [PdfModule],
|
||||
imports: [
|
||||
PdfModule
|
||||
, StorageModule
|
||||
, ConfigModule.forRoot({
|
||||
envFilePath: ['.env'],
|
||||
isGlobal: true,
|
||||
}),
|
||||
],
|
||||
controllers: [AppController],
|
||||
providers: [AppService],
|
||||
})
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { PdfController } from './pdf.controller';
|
||||
import { PdfService } from './pdf.service';
|
||||
import { StorageModule } from 'src/storage/storage.module';
|
||||
|
||||
@Module({
|
||||
controllers: [PdfController],
|
||||
providers: [PdfService]
|
||||
providers: [PdfService],
|
||||
imports: [StorageModule]
|
||||
})
|
||||
export class PdfModule {}
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import puppeteer from 'puppeteer-core';
|
||||
import { KeyHandoverDto } from 'src/model/key-handover.dto';
|
||||
import { MinioService } from 'src/storage/minio/minio.service';
|
||||
|
||||
@Injectable()
|
||||
export class PdfService {
|
||||
|
||||
constructor(private minioService: MinioService) {}
|
||||
|
||||
async generateTestPdf(): Promise<Buffer> {
|
||||
const browser = await puppeteer.launch({
|
||||
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/chromium',
|
||||
@@ -68,7 +72,7 @@ export class PdfService {
|
||||
}
|
||||
}
|
||||
|
||||
async generatePdf(dto: KeyHandoverDto): Promise<Buffer> {
|
||||
async generatePdf(dto: KeyHandoverDto): Promise<string> {
|
||||
const browser = await puppeteer.launch({
|
||||
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || '/usr/bin/chromium',
|
||||
headless: true,
|
||||
@@ -110,9 +114,10 @@ export class PdfService {
|
||||
</div>
|
||||
`,
|
||||
});
|
||||
|
||||
const fileName = crypto.randomUUID();
|
||||
const buffer = Buffer.from(pdf);
|
||||
return buffer;
|
||||
this.minioService.uploadPdf('keyvault-pro', fileName, buffer)
|
||||
return fileName;
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
|
||||
33
src/storage/minio/minio.service.ts
Normal file
33
src/storage/minio/minio.service.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { ConfigService } from '@nestjs/config';
|
||||
import { PutObjectCommand, S3Client } from '@aws-sdk/client-s3';
|
||||
|
||||
@Injectable()
|
||||
export class MinioService {
|
||||
private readonly client: S3Client;
|
||||
|
||||
constructor(private configService: ConfigService) {
|
||||
this.client = new S3Client({
|
||||
region: 'us-east-1',
|
||||
endpoint: this.configService.get('MINIOHOST') || '',
|
||||
credentials: {
|
||||
accessKeyId: this.configService.get('MINIOUSER') || '',
|
||||
secretAccessKey: this.configService.get('MINIOACCESSKEY') || '',
|
||||
},
|
||||
forcePathStyle: true,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
async uploadPdf(bucket: string, key: string, pdfBuffer: Buffer): Promise<void> {
|
||||
await this.client.send(
|
||||
new PutObjectCommand({
|
||||
Bucket: bucket,
|
||||
Key: key,
|
||||
Body: pdfBuffer,
|
||||
ContentType: 'application/pdf',
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
8
src/storage/storage.module.ts
Normal file
8
src/storage/storage.module.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { MinioService } from './minio/minio.service';
|
||||
|
||||
@Module({
|
||||
providers: [MinioService],
|
||||
exports: [MinioService]
|
||||
})
|
||||
export class StorageModule {}
|
||||
Reference in New Issue
Block a user