Guest User

Untitled

a guest
May 22nd, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.43 KB | None | 0 0
  1. const express = require('express')
  2. const app = express()
  3. const router = express.Router()
  4. const path = require('path')
  5. const fileType = require('file-type')
  6. const multer = require('multer')
  7. const fs = require('fs')
  8. const imagemodel = require('./image_model')
  9.  
  10. app.use(require('morgan')('combined'))
  11.  
  12. //mongodb://localhost:27017/upload-image
  13.  
  14. const upload = multer({
  15. dest: 'images/',
  16. fileFilter: (req, file, callback) => {
  17. if (!/\S+\.(jpg|bmp|gif|png)/gi.test(file.originalname)) {
  18. return callback(Error('Invalid image file name'), false)
  19. }
  20.  
  21.  
  22. const reqName = req.params.image_name
  23. imagemodel.find({ name: reqName }).limit(1).exec((err, res) => {
  24. if (err) {
  25. console.log(err)
  26. return callback(err, false)
  27. }
  28.  
  29. if (res.length === 0) callback(null, true)
  30. else callback(Error(`Image with name: "${reqName}" exists`), false)
  31. })
  32. }
  33. }).single('image')
  34.  
  35. router.post('/images/upload/:image_name', (req, res) => {
  36. console.log(`Post: req = ${req}`)
  37. upload(req, res, (err) => {
  38. if (err) {
  39. res.status(400).json({ message: err.message })
  40. return
  41. }
  42.  
  43. const reqName = req.params.image_name
  44. const imagePath = path.join('images', req.file.filename)
  45.  
  46. const model = new imagemodel({
  47. name: reqName,
  48. image_path: imagePath,
  49. created_at: new Date()
  50. })
  51.  
  52. model.save((err) => {
  53. if (err) {
  54. console.log(err)
  55. return res.status(500).json({message: err.message})
  56. }
  57.  
  58. res.status(200).json({ message: `Uploaded image "${reqName}" successfully` })
  59. })
  60. })
  61. })
  62.  
  63. router.get('/images/:image_name', (req, res) => {
  64. console.log(`Get: req = ${req}`)
  65. imagemodel.find({name: req.params.image_name}, {image_path: 1, _id: 0}).limit(1).exec((err, docs) => {
  66. if (err) {
  67. console.log(err)
  68. return res.status(500).json({message: err.message})
  69. }
  70.  
  71. if (docs.length === 0) {
  72. return res.status(404).json({ message: 'No such image file' })
  73. }
  74.  
  75. const imagePath = path.join(__dirname, docs[0].image_path)
  76. try {
  77. const buffer = fs.readFileSync(imagePath)
  78. const mime = fileType(buffer).mime
  79. res.writeHead(200, { 'Content-Type': mime })
  80. res.end(buffer, 'binary')
  81. } catch (error) {
  82. console.log(error.code)
  83. if (error.code === 'ENOENT') {
  84. res.status(404).json({ message: 'No such image file' })
  85. } else {
  86. res.status(500).json({ message: error.message })
  87. }
  88. }
  89. })
  90. })
  91.  
  92. router.get('/images', (req, res) => {
  93. console.log(`Get: req = ${req}`)
  94. const start = parseInt(req.query.start) || 0
  95. const limit = parseInt(req.query.limit) || 20
  96.  
  97. imagemodel.find({}, { name: 1, _id: 0 }).sort({ created_at: -1 }).skip(start).limit(limit).exec((err, docs) => {
  98. if (err) {
  99. console.log(err)
  100. return res.status(500).json({message: err.message, data: null})
  101. }
  102.  
  103. res.status(200).json({
  104. message: 'Get data successfully',
  105. data: docs.map(e => e.name)
  106. })
  107. })
  108. })
  109.  
  110. router.post("/test", (req, res) => {
  111. res.status(200).send("Nice")
  112. })
  113.  
  114. app.use('/', router)
  115. app.listen(3001, () => {
  116. console.log('Server is running at port 3001')
  117. })
Add Comment
Please, Sign In to add comment