Skip to content
This repository has been archived by the owner on Feb 19, 2022. It is now read-only.

Commit

Permalink
Code cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
tumainimosha committed May 27, 2020
1 parent d679b4e commit 3340b31
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 67 deletions.
4 changes: 2 additions & 2 deletions src/core/storage/storage.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ export class StorageController {
) { }

@All('files')
tus(@Req() req, @Res() res) {
async tus(@Req() req, @Res() res) {
return this.tusService.handleTus(req, res);
}

@All('uppy-companion')
companion(@Req() req, @Res() res) {
async companion(@Req() req, @Res() res) {
return this.uppyService.handleCompanion(req, res);
}
}
5 changes: 1 addition & 4 deletions src/core/storage/storage.module.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import { Module, MiddlewareConsumer } from '@nestjs/common';
import { Module } from '@nestjs/common';
import { StorageController } from './storage.controller';
import { storageConfig } from 'src/config/storage.config';
import { v4 as uuid } from 'uuid';
import { TusService } from './tus.service';
import companion = require('@uppy/companion')
import { UppyService } from './uppy.service';

@Module({
Expand Down
29 changes: 14 additions & 15 deletions src/core/storage/tus.service.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Injectable, OnModuleInit } from '@nestjs/common';
import { Injectable, OnModuleInit, Logger } from '@nestjs/common';
import tus = require('tus-node-server');
import { storageConfig } from 'src/config/storage.config';
import { v4 as uuid } from 'uuid';
Expand All @@ -8,41 +8,44 @@ import { FileMetadata } from './models/file-metadata.model';
@Injectable()
export class TusService implements OnModuleInit {

private logger = new Logger('TusService');

private readonly tusServer = new tus.Server();

onModuleInit() {
console.log(`The Storage Module has been initialized.`);
this.initializeTusServer();
}

async handleTus(req, res) {
return this.tusServer.handle(req, res);
}

private initializeTusServer() {
this.logger.verbose(`Initializing Tus Server`);
switch (storageConfig.storageDriver) {
case 'local':
this.tusServer.datastore = new tus.FileStore({
path: '/local-store',
namingFunction: this.fileNameFromRequest,
});

break;

case 's3':

this.tusServer.datastore = new tus.S3Store({
path: '/s3-store',
namingFunction: this.fileNameFromRequest,
bucket: storageConfig.bucket,
accessKeyId: storageConfig.accessKeyId,
secretAccessKey: storageConfig.secretAccessKey,
region: storageConfig.region,
partSize: 8 * 1024 * 1024, // each uploaded part will have ~8MB,
partSize: 8 * 1024 * 1024,
tmpDirPrefix: 'tus-s3-store',
});

break;

default:
throw 'Invalid storage driver' + storageConfig.storageDriver;
}

this.tusServer.on(tus.EVENTS.EVENT_UPLOAD_COMPLETE, (event) => {
console.log(`Upload complete for file ${JSON.stringify(event.file)}`);
this.logger.verbose(`Upload complete for file ${JSON.stringify(event.file)}`);
});
}

Expand All @@ -56,7 +59,7 @@ export class TusService implements OnModuleInit {

return fileName;
} catch (e) {
console.error(e);
this.logger.error(e);

// rethrow error
throw e;
Expand All @@ -81,8 +84,4 @@ export class TusService implements OnModuleInit {
return metadata;
}

handleTus(req, res) {
return this.tusServer.handle(req, res);
}

}
64 changes: 18 additions & 46 deletions src/core/storage/uppy.service.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
import { Injectable, OnModuleInit } from '@nestjs/common';
import { Injectable, OnModuleInit, Logger } from '@nestjs/common';
import companion = require('@uppy/companion')
import { storageConfig } from 'src/config/storage.config';
import { v4 as uuid } from 'uuid';
import { FileMetadata } from './models/file-metadata.model';


@Injectable()
export class UppyService implements OnModuleInit {

private logger = new Logger('UppyService');

private companionServer;

onModuleInit() {
console.log(`The Storage Module has been initialized.`);
this.initializeCompanionServer();
}

async handleCompanion(req, res) {
return this.companionServer.handle(req, res);
}

const tempDirectory = require('temp-dir') + '/';
private initializeCompanionServer() {

this.logger.verbose(`Initializing Companion Server.`);

const tempDirectory = require('temp-dir') + '/';
const options = {
providerOptions: {
s3: {
Expand All @@ -24,7 +32,11 @@ export class UppyService implements OnModuleInit {
bucket: storageConfig.bucket,
region: storageConfig.region,
getKey: (req, filename, metadata) => {
return uuid() + '-' + filename;
let extension: string = (filename) ? filename.split('.').pop() : null;
extension = extension && extension.length === 3 ? extension : null;
const prefix: string = uuid();
const s3filname = extension ? prefix + '.' + extension : prefix;
return s3filname;
},
awsClientOptions: {
acl: 'private'
Expand All @@ -43,48 +55,8 @@ export class UppyService implements OnModuleInit {
secret: 'Cplh4ISm9QGTW739qw9m3w==',
filePath: tempDirectory,
debug: true,
}
};

this.companionServer = companion.app(options);
}

// private fileNameFromRequest = (req, filename, metadata) => {
// try {
// const metadata = this.getFileMetadata(req);

// const prefix: string = uuid();

// const s3filname = metadata.extension ? prefix + '.' + metadata.extension : prefix;

// return fileName;
// } catch (e) {
// console.error(e);

// // rethrow error
// throw e;
// }
// }

// private getFileMetadata(req: any): FileMetadata {
// const uploadMeta: string = req.header('Upload-Metadata');
// const metadata = new FileMetadata();

// uploadMeta.split(',').map(item => {
// const tmp = item.split(' ');
// const key = tmp[0];
// const value = Buffer.from(tmp[1], 'base64').toString('ascii');;
// metadata[`${key}`] = value;
// });

// let extension: string = (metadata.name) ? metadata.name.split('.').pop() : null;
// extension = extension && extension.length === 3 ? extension : null;
// metadata.extension = extension;

// return metadata;
// }

handleCompanion(req, res) {
return this.companionServer.handle(req, res);
}

}

0 comments on commit 3340b31

Please sign in to comment.