Nodejs把接收图片base64格式保存为文件存储到服务器上

yizhihongxing

下面是详细讲解Nodejs把接收图片base64格式保存为文件存储到服务器上的完整攻略,过程中包含两条示例说明。

1. 接收base64格式图片数据

在Nodejs中接收base64格式图片数据,可以使用request模块或者express框架的post方式接收。下面是使用express框架接收的示例代码:

const express = require('express')
const bodyParser = require('body-parser')
const app = express()

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.post('/upload', function (req, res) {
  const base64Data = req.body.image.replace(/^data:image\/\w+;base64,/, '')
  const buffer = new Buffer.from(base64Data, 'base64')
})

上述代码中,使用了express框架中的bodyParser中间件解析客户端POST请求传递过来的图片base64数据,然后把新的Buffer实例对象存入buffer变量中。

2. 保存为文件到服务器

Nodejs中可以使用文件系统模块fs来把接收到的base64格式图片保存为文件。下面是将图片存储在本地的示例代码:

const express = require('express')
const bodyParser = require('body-parser')
const fs = require('fs')
const path = require('path')
const app = express()

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.post('/upload', function (req, res) {
  const base64Data = req.body.image.replace(/^data:image\/\w+;base64,/, '')
  const buffer = new Buffer.from(base64Data, 'base64')
  const filename = "image_" + Date.now() + ".png"
  fs.writeFile(path.join(__dirname, 'uploads', filename), buffer, function (err) {
    if (err) return console.log(err)
    console.log('Image saved successfully.')
  })
})

上述代码中,使用了fs.writeFile方法,把接收到的图片存储到服务器uploads目录下,并以时间戳命名图片文件名,从而避免了文件名冲突问题。

3. 返回保存的文件路径

在实际应用中,我们需要返回保存在服务器上的图片的访问路径。示例如下:

const express = require('express')
const bodyParser = require('body-parser')
const fs = require('fs')
const path = require('path')
const app = express()

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.post('/upload', function (req, res) {
  const base64Data = req.body.image.replace(/^data:image\/\w+;base64,/, '')
  const buffer = new Buffer.from(base64Data, 'base64')
  const filename = "image_" + Date.now() + ".png"
  const filePath = path.join(__dirname, 'uploads', filename)
  fs.writeFile(filePath, buffer, function (err) {
    if (err) return console.log(err)
    console.log('Image saved successfully.')
    res.send({
      code: 0,
      message: "上传成功",
      data: {
        url: "http://" + req.headers.host + "/uploads/" + filename
      }
    })
  })
})

上述代码中,我们在文件保存成功后,使用res.send方法将保存图片的访问路径url返回给客户端,以便客户端可以在页面中显示保存的图片。

示例说明

示例1

客户端上传一个base64格式图片,服务端接收后,将图片保存在本地,然后返回图片的访问路径。

  • 客户端发送POST请求
const postData = {
  image: "data:image/png;base64,iVBORw0KG..."
}

axios.post('/upload', postData)
  .then(response => {
    console.log(response.data)
  })
  .catch(error => {
    console.log(error)
  })
  • 服务端接收后,保存图片到本地

服务端接收数据,将图片保存在本地uploads目录下,返回图片访问路径给客户端。

const express = require('express')
const bodyParser = require('body-parser')
const fs = require('fs')
const path = require('path')
const app = express()

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.post('/upload', function (req, res) {
  const base64Data = req.body.image.replace(/^data:image\/\w+;base64,/, '')
  const buffer = new Buffer.from(base64Data, 'base64')
  const filename = "image_" + Date.now() + ".png"
  const filePath = path.join(__dirname, 'uploads', filename)
  fs.writeFile(filePath, buffer, function (err) {
    if (err) return console.log(err)
    console.log('Image saved successfully.')
    res.send({
      code: 0,
      message: "上传成功",
      data: {
        url: "http://" + req.headers.host + "/uploads/" + filename
      }
    })
  })
})

app.listen(3000, function () {
  console.log('Server start at port 3000.')
})
  • 客户端收到数据后,显示上传的图片

在客户端页面中展示上传图片的url地址。

<img src="http://localhost:3000/uploads/image_1528569107419.png">

示例2

客户端使用FormData方式上传图片,服务端接收后,将图片保存在本地,然后返回图片的访问路径。

  • 客户端发送POST请求

在客户端使用FormData对象,并将base64格式图片数据添加到FormData中。如果有其它需要添加的Parameter,则一并添加到FormData中。

const fileToUpload = document.querySelector('#fileToUpload').files[0]
const reader = new FileReader();
reader.onload = function (event) {
  const fileData = event.target.result.split(',')[1]
  const formData = new FormData()
  formData.append('parameter1', 'upload image')
  formData.append('parameter2', 'upload image')
  formData.append('image', fileData)
  axios.post('/upload', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  }).then(response => {
    console.log(response.data)
  }).catch(error => {
    console.log(error)
  })
}
reader.readAsDataURL(fileToUpload)
  • 服务端接收后,保存图片到本地

服务端使用multer中间件来解析FormData数据,将图片保存在服务器的uploads目录下,并返回保存图片的url地址。

const express = require('express')
const bodyParser = require('body-parser')
const fs = require('fs')
const path = require('path')
const multer = require('multer')
const app = express()

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

const upload = multer({
  storage: multer.diskStorage({
    destination: function (req, file, cb) {
      cb(null, path.join(__dirname, 'uploads'))
    },
    filename: function (req, file, cb) {
      const extName = path.extname(file.originalname)
      cb(null, 'image_' + Date.now() + extName)
    }
  })
})

app.post('/upload', upload.single('image'), function (req, res) {
    console.log('Image saved successfully.')
    res.send({
      code: 0,
      message: "上传成功",
      data: {
        url: "http://" + req.headers.host + "/uploads/" + req.file.filename
      }
    })
})

app.listen(3000, function () {
  console.log('Server start at port 3000.')
})
  • 客户端收到数据后,显示上传的图片

在客户端页面中展示上传图片的url地址。

<img src="http://localhost:3000/uploads/image_1528569107419.png">

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs把接收图片base64格式保存为文件存储到服务器上 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • debian5安装node.js步骤图解

    下面是“debian5安装node.js步骤图解”的完整攻略,过程中附带两条示例说明: 1. 安装必要的依赖 在安装 Node.js 前,需要先安装必要的依赖:build-essential 和 libssl-dev。可以使用以下命令安装: sudo apt-get update sudo apt-get install -y build-essential…

    node js 2023年6月8日
    00
  • nodejs 搭建简易服务器的图文教程(推荐)

    下面是详细的“nodejs 搭建简易服务器的图文教程(推荐)”的攻略。 基本概念 Node.js是一个基于Chrome V8引擎的JavaScript运行时。它可以解析和执行JavaScript代码,并在服务器端运行,可以联系上下文环境并直接访问OS底层库的服务器环境。Node.js在后端开发领域发挥着越来越重要的作用,我们可以使用Node.js轻松地搭建一…

    node js 2023年6月8日
    00
  • 基于Node.js实现nodemailer邮件发送

    当我们开发网站或者应用时,常常需要通过邮件来发送验证码、通知或者其他信息。Node.js提供了nodemailer模块来方便地实现邮件发送功能。 以下是实现nodemailer邮件发送的攻略: 1. 安装nodemailer npm install nodemailer –save 2. 引入模块 const nodemailer = require(‘n…

    node js 2023年6月8日
    00
  • 详解NodeJS框架express的路径映射(路由)功能及控制

    接下来我将详细讲解NodeJS框架express的路径映射(路由)功能及控制的完整攻略。 路由 在Web应用程序中,路由是指将HTTP请求映射到处理程序的过程。Express框架提供了路由的功能,并且支持多种方式创建路由规则。 基本路由 最基本的路由就是将请求路径映射到处理函数上。这可以通过使用Express中的app.get()方法来实现。app.get(…

    node js 2023年6月8日
    00
  • nodejs通过钉钉群机器人推送消息的实现代码

    实现nodejs通过钉钉群机器人推送消息的过程包括以下内容: 创建钉钉群机器人 使用nodejs请求钉钉机器人API推送消息 创建钉钉群机器人 首先需要在钉钉群中创建一个机器人,具体步骤如下: 进入需要接入机器人的群聊会话中; 点击右上角的群设置,选择“智能群助手”; 选择“添加机器人”,根据需要选择自定义机器人或模板机器人; 定制机器人名称、头像、安全设置…

    node js 2023年6月8日
    00
  • 浅谈React + Webpack 构建打包优化

    浅谈React + Webpack构建打包优化 本文将详细讲解如何使用Webpack对React项目进行构建打包优化。其中将会涉及到Webpack的各种特性和优化技巧,旨在帮助开发者提高React项目构建打包效率。下面将逐步展开。 Webpack的基本配置 Webpack是一个打包工具,最基本的配置是将所有的JavaScript文件打包为一个或多个JavaS…

    node js 2023年6月8日
    00
  • node中的cookie的具体使用

    接下来我将为你详细介绍“Node.js中的Cookie的具体使用”的攻略。 什么是Cookie 在Web开发中,Cookie是一种由服务器通过HTTP协议写入客户端计算机中的小文件,它可以保存一些用户身份验证、页面定位、状态保持等相关信息。之后客户端每次请求页面都会携带该Cookie信息,从而完成用户身份的认证和页面状态的保持。 Node.js中的Cooki…

    node js 2023年6月8日
    00
  • JS前端二维数组生成树形结构示例详解

    作为本文作者,我将为大家详细讲解“JS前端二维数组生成树形结构示例详解”的攻略,让读者能够更加深入地了解并掌握二维数组生成树形结构的方法。 标题 1. 介绍 在前端开发中,我们经常需要将一组数据进行树形结构的展示,这时候我们就需要通过一些方法来实现树形结构的生成。本文就将为大家介绍一种使用二维数组生成树形结构的方法。 2. 实现步骤 2.1 数组格式 首先,…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部