aboutsummaryrefslogtreecommitdiff
path: root/services/files/files.class.ts
diff options
context:
space:
mode:
Diffstat (limited to 'services/files/files.class.ts')
-rw-r--r--services/files/files.class.ts44
1 files changed, 23 insertions, 21 deletions
diff --git a/services/files/files.class.ts b/services/files/files.class.ts
index 7e4bcbf..f2a0960 100644
--- a/services/files/files.class.ts
+++ b/services/files/files.class.ts
@@ -3,18 +3,20 @@ import { Params } from '@feathersjs/feathers';
import { v4 } from 'uuid';
import axios from 'axios';
import fs from 'fs';
-import path from 'path';
-import { User } from 'which-types';
// Use require to avoid bug
// https://stackoverflow.com/questions/62611373/heroku-crashes-when-importing-aws-sdk
+// TODO: use import statement
+// eslint-disable-next-line
const S3 = require('aws-sdk/clients/s3');
export default class Files {
- app!: Application;
- s3!: any;
- bucket!: string;
+ public app!: Application;
+
+ private s3!: typeof S3;
+
+ private bucket!: string;
async find(params: Params): Promise<string> {
const path = this.generateS3Path(params.user?.username);
@@ -22,10 +24,10 @@ export default class Files {
}
public isS3url(url: string): boolean {
- return url.startsWith('https://${this.bucket}.s3');
+ return url.startsWith(`https://${this.bucket}.s3`);
}
- public generateS3Path(prefix='', ext='png'): string {
+ public generateS3Path(prefix = '', ext = 'png'): string {
const key = v4();
const fileName = `${key}.${ext}`;
return prefix ? `${prefix}/${fileName}` : fileName;
@@ -37,7 +39,7 @@ export default class Files {
Bucket: this.bucket,
Key: path,
ContentType: 'image/*',
- Expires: 300,
+ Expires: 300
});
}
@@ -45,7 +47,7 @@ export default class Files {
return this.getUploadUrl(path).then((url: string) => {
const queryIndex = url.indexOf('?');
return url.slice(0, queryIndex);
- })
+ });
}
private createTmpDir() {
@@ -53,29 +55,29 @@ export default class Files {
}
async downloadFile(url: string): Promise<string> {
- return new Promise(async (resolve, reject) => {
+ return new Promise((resolve, reject) => {
this.createTmpDir();
const filePath = `tmp/${v4()}`;
const fileStream = fs.createWriteStream(filePath);
- const response = await axios.get(url, { responseType: 'stream' })
- response.data.pipe(fileStream)
- .on('error', reject)
- .on('close', () => resolve(filePath));
+ axios.get(url, { responseType: 'stream' })
+ .then(response => {
+ response.data.pipe(fileStream)
+ .on('error', reject)
+ .on('close', () => resolve(filePath));
+ })
+ .catch(error => reject(error));
});
}
- async uploadFileToS3(filePath: string, s3Path: string) {
+ async uploadFileToS3(filePath: string, s3Path: string): Promise<string> {
const fileStream = fs.createReadStream(filePath);
- const request = this.s3.upload({
+ await this.s3.upload({
Bucket: this.bucket,
Key: s3Path,
Body: fileStream,
ContentType: 'image/png'
- });
- request.on('httpUploadProgress', progress => {
- console.log('progress', progress);
- })
- await request.promise();
+ }).promise();
+ fs.unlinkSync(filePath);
return this.getDownloadUrl(s3Path);
}