Skip to content

Commit d75a0d4

Browse files
committed
Add image save microservice
1 parent 575bfa5 commit d75a0d4

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

image-save.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
'use strict'
2+
3+
const fs = require('fs')
4+
const path = require('path')
5+
const { send, json } = require('micro')
6+
const Filter = require('instagram_js_filter')
7+
const effects = new Filter()
8+
9+
//
10+
// This microservice will be served as /save
11+
//
12+
// It will receive the name of the uploaded image and the filter in a JSON
13+
// {
14+
// "name": "xxxx-xxx-xxx-xx.jpg",
15+
// "filter": "sepia"
16+
// }
17+
//
18+
module.exports = async function (req, res) {
19+
const body = await json(req)
20+
const { name, filter } = body
21+
22+
let image
23+
try {
24+
image = await convert(name, filter)
25+
await save(name, image)
26+
} catch (e) {
27+
return send(res, 500, e.message)
28+
}
29+
30+
send(res, 200, { name: name, src: `/saved/${name}` })
31+
}
32+
33+
//
34+
// Convert an image and applies a filter
35+
//
36+
function convert (src, filter) {
37+
return new Promise((resolve, reject) => {
38+
fs.readFile(path.join(__dirname, 'uploads', src), (err, buffer) => {
39+
if (err) return reject(err)
40+
41+
const result = effects.apply(buffer, filter, {})
42+
resolve(result)
43+
})
44+
})
45+
}
46+
47+
//
48+
// Saves an image to the file system
49+
//
50+
function save (name, image) {
51+
return new Promise((resolve, reject) => {
52+
fs.writeFile(path.join(__dirname, 'saved', name), new Buffer(image, 'base64'), (err) => {
53+
if (err) return reject(err)
54+
55+
resolve()
56+
})
57+
})
58+
}

0 commit comments

Comments
 (0)