1
1
'use strict'
2
2
3
- const fs = require ( 'fs ' )
4
- const path = require ( 'path ' )
3
+ const mime = require ( 'mime-types ' )
4
+ const S3 = require ( 'aws-sdk/clients/s3 ' )
5
5
const { send, json } = require ( 'micro' )
6
6
const Filter = require ( 'instagram_js_filter' )
7
7
const effects = new Filter ( )
8
8
9
+ const s3 = new S3 ( {
10
+ region : 'us-west-2' ,
11
+ params : { Bucket : 'medellinjs-microservicios' } ,
12
+ accessKeyId : process . env . AWS_ACCESS_KEY ,
13
+ secretAccessKey : process . env . AWS_SECRET_KEY
14
+ } )
15
+
9
16
//
10
17
// This microservice will be served as /save
11
18
//
@@ -19,40 +26,49 @@ module.exports = async function (req, res) {
19
26
const body = await json ( req )
20
27
const { name, filter } = body
21
28
22
- let image
29
+ let image , result
23
30
try {
24
31
image = await convert ( name , filter )
25
- await save ( name , image )
32
+ result = await s3move ( name , image )
26
33
} catch ( e ) {
34
+ console . log ( e . stack )
27
35
return send ( res , 500 , e . message )
28
36
}
29
37
30
- send ( res , 200 , { name : name , src : `/saved/ ${ name } ` } )
38
+ send ( res , 200 , { name : name , src : result . Location } )
31
39
}
32
40
33
41
//
34
42
// Convert an image and applies a filter
35
43
//
36
- function convert ( src , filter ) {
44
+ function convert ( name , filter ) {
37
45
return new Promise ( ( resolve , reject ) => {
38
- fs . readFile ( path . join ( __dirname , 'uploads' , src ) , ( err , buffer ) => {
46
+ s3 . getObject ( {
47
+ Key : `uploads/${ name } `
48
+ } , ( err , result ) => {
39
49
if ( err ) return reject ( err )
40
50
41
- const result = effects . apply ( buffer , filter , { } )
42
- resolve ( result )
51
+ const image = effects . apply ( result . Body , filter , { } )
52
+
53
+ resolve ( new Buffer ( image , 'base64' ) )
43
54
} )
44
55
} )
45
56
}
46
57
47
58
//
48
- // Saves an image to the file system
59
+ // Saves an image to s3
49
60
//
50
- function save ( name , image ) {
61
+ function s3move ( name , data ) {
51
62
return new Promise ( ( resolve , reject ) => {
52
- fs . writeFile ( path . join ( __dirname , 'saved' , name ) , new Buffer ( image , 'base64' ) , ( err ) => {
63
+ s3 . upload ( {
64
+ Key : `saved/${ name } ` ,
65
+ Body : data ,
66
+ ACL : 'public-read' ,
67
+ ContentType : mime . lookup ( name )
68
+ } , ( err , result ) => {
53
69
if ( err ) return reject ( err )
54
70
55
- resolve ( )
71
+ resolve ( result )
56
72
} )
57
73
} )
58
74
}
0 commit comments