-
Notifications
You must be signed in to change notification settings - Fork 57
Expand file tree
/
Copy pathstorage.js
More file actions
66 lines (57 loc) · 2.02 KB
/
storage.js
File metadata and controls
66 lines (57 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import fs from 'fs';
import Jimp from 'jimp';
import AWS from 'aws-sdk';
import {config} from './server-entry';
async function saveOnAmazon(options) {
const s3 = new AWS.S3({
accessKeyId: config('storage.key'),
secretAccessKey: config('storage.secret'),
region: config('storage.region')
});
const response = await s3.putObject({
Bucket: config('storage.bucket'),
Key: options.key,
Body: options.buffer,
ACL: 'public-read',
ContentType: options.mimetype,
}).promise();
console.log('resp', response);
return `https://s3-${config('storage.region')}.amazonaws.com/${config('storage.bucket')}/${options.key}`;
}
async function saveOnDisk(options) {
const wstream = fs.createWriteStream(`NULLSTACK_ROOT` + '/' + options.key);
wstream.write(options.buffer);
wstream.end();
return `${config('default.protocol')}://${config('default.domain')}/` + options.key;
}
export default {
collection(folder) {
return {
async insertOne(options) {
const path = `uploads/${folder}-`;
if(options.width || options.height) {
let buffer = await Jimp.read(options.buffer);
const width = options.width || Jimp.AUTO;
const height = options.height || Jimp.AUTO;
options.buffer = await buffer.resize(width, height).getBufferAsync(options.mimetype);
}
if(options.quality) {
let buffer = await Jimp.read(options.buffer);
options.buffer = await buffer.quality(options.quality).getBufferAsync('image/jpeg');
options.mimetype = 'image/jpeg';
}
if(!options.extension) {
const extensions = options.originalname.split('.');
options.extension = extensions[extensions.length - 1];
}
const name = `${options.name || new Date().getTime()}.${options.extension}`;
options.key = `${path}${name}`;
if(config('storage.type') == 's3') {
return await saveOnAmazon(options);
} else {
return await saveOnDisk(options);
}
}
}
}
}