如何在 NodeJS 中保存和显示使用 Multer 包保存的图片?

Posted

技术标签:

【中文标题】如何在 NodeJS 中保存和显示使用 Multer 包保存的图片?【英文标题】:How to save and show the picture saved using Multer package in NodeJS? 【发布时间】:2018-12-31 04:24:54 【问题描述】:

我正在尝试使用multer 包保存图像文件。

这是我们的registration.js,其中包含注册表。以下脚本没有错误,但我们不知道如何访问 url 中的文件或向用户显示图像(具体如何以 MIME 格式保存)。

import React, Component from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';

export default class Registration extends Component 
  constructor(props) 
    super(props);
    this.handleSubmit = this.handleSubmit.bind(this);
  

  handleSubmit(e) 
    e.preventDefault();
    var config = 
      headers: 
        'Content-Type': 'multipart/form-data'
      
    ;

    var formData = new FormData();
    var imagefile = document.getElementById('profilePicture');
    formData.append('name',document.getElementById('name').value);
    formData.append('email',document.getElementById('email').value);
    formData.append('telegramId',document.getElementById('telegramId').value);
    formData.append('password',document.getElementById('password').value);
    formData.append('image', imagefile.files[0]);
    console.log(formData);
    axios.post('/registration', formData,config).then(function(res)
      console.log(res.data+'res');
    ).catch(console.error);
  

  render() 
    return (<form className="registrationForm">
      <input type="text" name="name" id="name" required="required" placeholder="name" />
      <br/>
      <input type="email" id="email" required="required" placeholder="email"/>
      <br/>
      <input type="text" id="telegramId" required="required" placeholder="telegramID"/>
      <br/>
      <input type="password" id="password" required="required" placeholder="password"/>
      <br/>
      <input type="file" id="profilePicture"/>
      <br/>
      <button className="registerButton" onClick=this.handleSubmit>Register</button>
    </form>)
  ;

这是服务器端代码:

var multer  = require('multer')
var upload = multer( dest: '../assets/uploads/' )


app.post('/registration',upload.single('image'), (req, res) => 
  // console.log(req.body);
  console.log(req.file);
);

这就是控制台记录的内容!

 fieldname: 'image',
  originalname: 'sharif-logo-png-transparent.png',
  encoding: '7bit',
  mimetype: 'image/png',

  destination: 'uploads/',
  filename: 'e098a8370f444f321acd9aae668538fd',
  path: 'uploads\\e098a8370f444f321acd9aae668538fd',
  size: 271654

【问题讨论】:

【参考方案1】:

multer 已经负责将文件保存到磁盘,因此您需要做的就是使该文件夹可访问,以便在&lt;img&gt; 标签中使用(或任何您想要用来显示它们的标签)。一个好的解决方案是express.static:

const  static  = require('express');
app.use('/images/', static('../assets/uploads/'));

然后你可以在你的客户端代码中使用它们:

<img src="/images/e098a8370f444f321acd9aae668538fd"></img>

您根本不必在 .post('/registration') 处理程序中处理文件。

【讨论】:

以上是关于如何在 NodeJS 中保存和显示使用 Multer 包保存的图片?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用使用 Angular 2 发布的 nodejs 保存包含图像的表单数据

如何保存 jwt 令牌以在下一个请求中使用?在nodejs中

如何使用nodejs将pdf文件保存在我们的本地项目目录中

在 NodeJS 中,如何使用 node-postgres 模块将 JSON 对象保存为文本?

如何保存我的 Nodejs 区块链