Skip to content

Commit 7689430

Browse files
committed
refactor(app.js): Extract upload image
1 parent d90bd6d commit 7689430

2 files changed

Lines changed: 97 additions & 84 deletions

File tree

app.js

Lines changed: 2 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,8 @@ var compression = require('compression')
1010
var session = require('express-session')
1111
var SequelizeStore = require('connect-session-sequelize')(session.Store)
1212
var fs = require('fs')
13-
var url = require('url')
1413
var path = require('path')
15-
var imgur = require('imgur')
16-
var formidable = require('formidable')
14+
1715
var morgan = require('morgan')
1816
var passportSocketIo = require('passport.socketio')
1917
var helmet = require('helmet')
@@ -200,87 +198,7 @@ app.use(require('./lib/web/statusRouter'))
200198
app.use(require('./lib/web/auth'))
201199
app.use(require('./lib/web/historyRouter'))
202200
app.use(require('./lib/web/userRouter'))
203-
// upload image
204-
app.post('/uploadimage', function (req, res) {
205-
var form = new formidable.IncomingForm()
206-
207-
form.keepExtensions = true
208-
209-
if (config.imageUploadType === 'filesystem') {
210-
form.uploadDir = 'public/uploads'
211-
}
212-
213-
form.parse(req, function (err, fields, files) {
214-
if (err || !files.image || !files.image.path) {
215-
response.errorForbidden(res)
216-
} else {
217-
if (config.debug) { logger.info('SERVER received uploadimage: ' + JSON.stringify(files.image)) }
218-
219-
try {
220-
switch (config.imageUploadType) {
221-
case 'filesystem':
222-
res.send({
223-
link: url.resolve(config.serverurl + '/', files.image.path.match(/^public\/(.+$)/)[1])
224-
})
225-
226-
break
227-
228-
case 's3':
229-
var AWS = require('aws-sdk')
230-
var awsConfig = new AWS.Config(config.s3)
231-
var s3 = new AWS.S3(awsConfig)
232-
233-
fs.readFile(files.image.path, function (err, buffer) {
234-
if (err) {
235-
logger.error(err)
236-
res.status(500).end('upload image error')
237-
return
238-
}
239-
var params = {
240-
Bucket: config.s3bucket,
241-
Key: path.join('uploads', path.basename(files.image.path)),
242-
Body: buffer
243-
}
244-
245-
var mimeType = getImageMimeType(files.image.path)
246-
if (mimeType) { params.ContentType = mimeType }
247-
248-
s3.putObject(params, function (err, data) {
249-
if (err) {
250-
logger.error(err)
251-
res.status(500).end('upload image error')
252-
return
253-
}
254-
res.send({
255-
link: `https://s3-${config.s3.region}.amazonaws.com/${config.s3bucket}/${params.Key}`
256-
})
257-
})
258-
})
259-
break
260-
case 'imgur':
261-
default:
262-
imgur.setClientId(config.imgur.clientID)
263-
imgur.uploadFile(files.image.path)
264-
.then(function (json) {
265-
if (config.debug) { logger.info('SERVER uploadimage success: ' + JSON.stringify(json)) }
266-
res.send({
267-
link: json.data.link.replace(/^http:\/\//i, 'https://')
268-
})
269-
})
270-
.catch(function (err) {
271-
logger.error(err)
272-
return res.status(500).end('upload image error')
273-
})
274-
break
275-
}
276-
} catch (err) {
277-
logger.error(err)
278-
return res.status(500).end('upload image error')
279-
}
280-
}
281-
})
282-
})
283-
201+
app.use(require('./lib/web/imageRouter'))
284202
app.use(require('./lib/web/noteRouter'))
285203

286204
// response not found if no any route matxches

lib/web/imageRouter.js

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
'use strict'
2+
var fs = require('fs')
3+
var url = require('url')
4+
var path = require('path')
5+
6+
const Router = require('express').Router
7+
const formidable = require('formidable')
8+
var imgur = require('imgur')
9+
10+
const config = require('../config')
11+
const logger = require('../logger')
12+
const response = require('../response')
13+
14+
const imageRouter = module.exports = Router()
15+
16+
// upload image
17+
imageRouter.post('/uploadimage', function (req, res) {
18+
var form = new formidable.IncomingForm()
19+
20+
form.keepExtensions = true
21+
22+
if (config.imageUploadType === 'filesystem') {
23+
form.uploadDir = 'public/uploads'
24+
}
25+
26+
form.parse(req, function (err, fields, files) {
27+
if (err || !files.image || !files.image.path) {
28+
response.errorForbidden(res)
29+
} else {
30+
if (config.debug) { logger.info('SERVER received uploadimage: ' + JSON.stringify(files.image)) }
31+
32+
try {
33+
switch (config.imageUploadType) {
34+
case 'filesystem':
35+
res.send({
36+
link: url.resolve(config.serverurl + '/', files.image.path.match(/^public\/(.+$)/)[1])
37+
})
38+
39+
break
40+
41+
case 's3':
42+
var AWS = require('aws-sdk')
43+
var awsConfig = new AWS.Config(config.s3)
44+
var s3 = new AWS.S3(awsConfig)
45+
46+
fs.readFile(files.image.path, function (err, buffer) {
47+
if (err) {
48+
logger.error(err)
49+
res.status(500).end('upload image error')
50+
return
51+
}
52+
var params = {
53+
Bucket: config.s3bucket,
54+
Key: path.join('uploads', path.basename(files.image.path)),
55+
Body: buffer
56+
}
57+
58+
var mimeType = getImageMimeType(files.image.path)
59+
if (mimeType) { params.ContentType = mimeType }
60+
61+
s3.putObject(params, function (err, data) {
62+
if (err) {
63+
logger.error(err)
64+
res.status(500).end('upload image error')
65+
return
66+
}
67+
res.send({
68+
link: `https://s3-${config.s3.region}.amazonaws.com/${config.s3bucket}/${params.Key}`
69+
})
70+
})
71+
})
72+
break
73+
case 'imgur':
74+
default:
75+
imgur.setClientId(config.imgur.clientID)
76+
imgur.uploadFile(files.image.path)
77+
.then(function (json) {
78+
if (config.debug) { logger.info('SERVER uploadimage success: ' + JSON.stringify(json)) }
79+
res.send({
80+
link: json.data.link.replace(/^http:\/\//i, 'https://')
81+
})
82+
})
83+
.catch(function (err) {
84+
logger.error(err)
85+
return res.status(500).end('upload image error')
86+
})
87+
break
88+
}
89+
} catch (err) {
90+
logger.error(err)
91+
return res.status(500).end('upload image error')
92+
}
93+
}
94+
})
95+
})

0 commit comments

Comments
 (0)