如何使用 Mongoose、Express、Angular 4 和 NodeJS 上传/保存和显示图片

Posted

技术标签:

【中文标题】如何使用 Mongoose、Express、Angular 4 和 NodeJS 上传/保存和显示图片【英文标题】:How to upload/save and show pictures with Mongoose,Express, Angular 4 and NodeJS 【发布时间】:2018-03-19 19:18:48 【问题描述】:

我正在使用 Mongoose、Express、Angular 4 和 NodeJS 来创建应用程序,我对这门语言还很陌生。 在我的一个组件中,我有一个 CRUD,我想上传一张图片。 保存到 Mongoose/MongoDB 后,我想在屏幕上显示图片。

我应该使用插件吗?如果有,是哪一个?可以举个例子吗?

【问题讨论】:

【参考方案1】:

如果你想上传文件到服务器,你可以使用 npm 提供的 multer module for nodejs。

这个网站对你很有帮助。 - https://www.terlici.com/2015/05/16/uploading-files-locally.html

而且,如果您想将 multer 与 mongoose 一起使用,此示例也会有所帮助。

Image.js

import mongoose from 'mongoose'
const Schema = mongoose.Schema

const Image = new Schema(
  filename: 
    type: String,
    required: true
  ,
  originalname: 
    type: String,
    required: true
  
, timestamps: true)

module.exports = mongoose.model('Image', Image)

server.js

// ...
const app = express()
const Image = require('./Image.js')
const multer = require('multer')
const path = require('path')
const UPLOAD_PATH = path.resolve(__dirname, 'path/to/uploadedFiles')
const upload = multer(
  dest: UPLOAD_PATH,
  limits: fileSize: 1000000, files: 5
)

// upload image
app.post('/api/image', upload.array('image', 5), (req, res, next) => 
  const images = req.files.map((file) => 
    return 
      filename: file.filename,
      originalname: file.originalname
    
  )
  Image.insertMany(images, (err, result) => 
    if (err) return res.sendStatus(404)
    res.json(result)
  )
)

// get image with id
app.get('/:id', (req, res, next) => 
  Image.findOne(_id: req.params.id, (err, image) => 
    if (err) return res.sendStatus(404)
    fs.createReadStream(path.resolve(UPLOAD_PATH, image.filename)).pipe(res)
  )
)

// ...

client.js

// ...
const axios = require('axios')

function uploadImage () 
  const files = document.getElementById('INPUT_TAG').files
  const formData = new FormData()
  formData.append('image', files[0])
  axios.post('YOUR_URL/api/image', formData)

// ...

upload.html

<body>
  <input type="file" id="INPUT_TAG"/>
  <button>call uploadImage() with angular/vue/react/etc</button>
</body>

image.html

<body>
  <img src="YOUR_URL/api/image/IMAGE_ID">
</body>

【讨论】:

以上是关于如何使用 Mongoose、Express、Angular 4 和 NodeJS 上传/保存和显示图片的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Node.js、Express 和 Mongoose 进行身份验证?

您如何在 Node.js + Express + Mongoose + Jade 中处理表单验证,尤其是嵌套模型

如何对使用 Express + Mongoose 构建的 NodeJs REST API 服务器进行单元测试?

如何使用特定集合 Mongoose-Express-Mongodb (MEAN STACK)

如何使用 express .node 、 mongoose 和 ejs 删除对象

如何使用 express、mongoose 将 mp3 上传到 mongodb