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

下面是详细讲解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日

相关文章

  • 关于npm主版本升级及其相关知识点总结

    关于npm主版本升级及其相关知识点总结,我会从以下几个方面逐一进行讲解: npm版本号格式 npm主版本升级的含义 如何进行npm主版本升级 升级后的注意事项 1. npm版本号格式 在深入讲解npm主版本升级之前,我们首先需要了解npm版本号的格式。npm版本号是由三个部分组成的,分别是:主版本号、次版本号和修订号,格式为:X.Y.Z。 其中,X代表主版本…

    node js 2023年6月8日
    00
  • JavaScript库urlcat 之URL构建器库

    下面是关于 JavaScript 库 urlcat 之 URL 构建器库的完整攻略。 简介 urlcat 是一个 URL 构建器库,它可以帮助开发者更方便、更快速地构建 URL,支持多种常见的 URL 场景,比如拼接 URL、替换 URL 中的参数等。urlcat 库的 Github 仓库地址为 https://github.com/interledgerj…

    node js 2023年6月8日
    00
  • Nodejs极简入门教程(三):进程

    下面是Nodejs极简入门教程(三):进程的详细讲解攻略。 什么是进程 在操作系统中,进程是指正在运行的程序。它是一个独立的执行单元,一个程序会启动一个或多个进程。每个进程都是由操作系统来管理和调度的。 进程的特点: 独立性:进程的执行是互相独立的,一个进程不会影响另一个进程。 动态性:进程的创建和撤销都是动态的,一个进程可以创建另一个进程,同时也可以被终止…

    node js 2023年6月8日
    00
  • NodeJS搭建HTTP服务器的实现步骤

    下面是详细的NodeJS搭建HTTP服务器的实现步骤攻略。 确定需求 在开始编写任何代码之前,我们需要先确定需要实现的HTTP服务器的基本需求。基本的需求可能包括: 能够处理HTTP GET请求 能够处理HTTP POST请求 能够处理HTTP头文件 支持静态文件服务 支持路由功能 实现这些需求的方法是编写一个基本的HTTP服务器,这个服务器能够监听请求,解…

    node js 2023年6月8日
    00
  • 初识NodeJS服务端开发入门(Express+MySQL)

    初识NodeJS服务端开发入门(Express+MySQL) 什么是NodeJS Node.js是一个开源、跨平台的JavaScript runtime环境,可以在服务器端运行 JavaScript 代码。Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量且高效。 什么是Express Express是一个基于Node.js的Web应用程序开发…

    node js 2023年6月8日
    00
  • Mac 安装 nodejs方法(图文详细步骤)

    Mac 安装 nodejs方法(图文详细步骤) Node.js 是一个基于 Chrome JavaScript 运行时建立的平台,可用于构建高度伸缩性的 Web 应用程序。以下是在 Mac 上安装 Node.js 的详细步骤。 步骤一:检查是否已安装 Homebrew Homebrew 是 Mac 下的软件包管理器,我们可以使用它来安装 Node.js。检查…

    node js 2023年6月8日
    00
  • Node.js基础入门之回调函数及异步与同步详解

    Node.js基础入门之回调函数及异步与同步详解 什么是回调函数? 回调函数是一种常见的编程模式,它是一种在完成某个操作之后进行回调的方式。比如,我们进行异步操作(诸如文件读取、网络请求等),就需要使用回调函数来实现。 异步与同步 异步指的是程序执行时,不会阻塞程序的其他部分,而允许程序在等待某个操作完成时继续执行下去。相对地,同步指的是程序在等待某个操作完…

    node js 2023年6月8日
    00
  • NodeJS和浏览器中this关键字的不同之处

    NodeJS和浏览器中的JavaScript在使用this关键字时有着一些区别。下面我们将从以下两个方面进行详细讲解。 1. this在NodeJS中的指向 在NodeJS中,this指向的是当前执行上下文中的对象。在全局上下文中,this关键字指向的是global对象。在函数内部,this指向的是运行时函数所属的对象。当函数作为对象方法被调用时,this指…

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