Node.js: express + MySQL + Vue实现图片上传

这篇具有很好参考价值的文章主要介绍了Node.js: express + MySQL + Vue实现图片上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        前段时间用Node.js: express + MySQL + Vue + element组件做了一个小项目,记录一下图片上传的实现。

        将图片存入数据库有两种方法:

                1,将图片以二进制流的方式存入数据库(数据库搬家容易,比较安全,但数据库空间的消耗大,访问会比较缓慢)

                2,将图片的存放地址存入数据库

        主要介绍第二种。

一,将图片以二进制流的方式存入数据库

        将图片转成base64格式,数据类型使用MEDIUMTEXT类型。

Node.js: express + MySQL + Vue实现图片上传

Node.js: express + MySQL + Vue实现图片上传

         或者将图片转为保存到数据库的Blob类型中。

二,将图片的存放地址存入数据库中。

1,编写接口url

        会运用到一个中间件,Multer,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件 :multer/README-zh-cn.md at master · expressjs/multer · GitHub

        Multer会添加一个body对象以及file或files对象到request对象中,body对象包含表单的文本域信息,file对象包含对象表单上传的文件信息。

(router和router_handle两个文件夹的意思是,将路径和执行方法分开,方便管理,具体内容可以查看  Node.js: express + MySQL的使用_express mysql_掉头发类型的选手的博客-CSDN博客)

router下的文件

//引入multer
const multer = require('multer')
//磁盘存储引擎,可以控制文件的存储,省略的话这些文件会保存在内存中,不会写入磁盘
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        //控制文件的存储路径
        cb(null, 'image/avatar')
    },
    filename: function (req, file, cb) {
        //定义上传文件存储时的文件名
        cb(null, file.originalname)
    }
})
const upload = multer({ storage: storage })
//接受单文件上传
router.post('/update/avatar', upload.single('avatar'), userInfo_handler.updateAvatar)

        首先引入multer,配置图片的存储地址和文件名,省略的话上传的文件会保存在内存中,不会写入磁盘,在上传前要在项目的根目录下创建一个文件夹用于接收上传的文件,比如,我的代码中定义文件的存储路径为  cb(null, 'image/avatar')  ,要在目录下创建一个image文件夹,再在image文件夹下创建一个avatar文件夹。

Node.js: express + MySQL + Vue实现图片上传

        定义文件存储时的文件名一般会使用时间戳作为文件名,防止上传的文件重复(我这儿没有使用时间戳)。 

        upload.single('avatar') 表示接受单文件上传,avatar代表上传文件时的参数字段。多文件上传使用 .array(fieldname[, maxCount]) ,maxCount来限制最大的上传数量。

router_handler文件下的处理函数

exports.updateAvatar = (req, res) => {
    // 定义更新头像的sql
    const sql = 'update users set avatar=? where id=?;'
    // console.log(req);
    // console.log(req.body.id)
    // console.log(req.file);
    // console.log(req.file.destination);
    const avatarUrl = `http://127.0.0.1:3007/${req.file.destination.split('/')[1]}/${req.file.originalname}`
    // console.log(avatarUrl);
    // 执行sql语句
    db.query(sql, [avatarUrl, req.body.id], (err, results) => {
        // sql语句执行错误
        if(err) return res.cc(err)
        // sql语句执行成功,但影响的条数部位1属于执行失败
        if(results.affectedRows !== 1) return res.cc('更换头像失败!')
        // 更换头像成功
        res.cc('更换头像成功!', 0)
    })
}

传回的request

Node.js: express + MySQL + Vue实现图片上传

 Node.js: express + MySQL + Vue实现图片上传

        这时使用 req.file取到上传的图片信息,req.body取到其他上传的数据。

        然后处理图片路径,图片路径根据自己项目的实际情况进行处理。最后执行sql语句,存入数据库。

        接口处理完毕。

        要想在浏览器中通过路径访问图片还需要在  app.js 这个文件中加入

app.use(express.static('image'))

        将整个image文件夹转为静态文件。

2,编写前端代码

        前端代码用element组件举个例子。使用element中上传的组件。其中有几个属性是比较重要的。

Node.js: express + MySQL + Vue实现图片上传

Node.js: express + MySQL + Vue实现图片上传

         action 是请求的URL,如果你写的接口需要上送token,需要配置headers,data是请求中除了图片文件其他的额外参数,name是上传图片文件的字段,这个字段必须和定义url时的那个字段保持一致,就是下面这个字段。

Node.js: express + MySQL + Vue实现图片上传

         之后再重新请求数据库中的数据,将图片显示在页面上。

Node.js: express + MySQL + Vue实现图片上传

上传之后

Node.js: express + MySQL + Vue实现图片上传

图片的保存位置

 Node.js: express + MySQL + Vue实现图片上传

数据库中 

Node.js: express + MySQL + Vue实现图片上传

 这个路径可以直接在浏览器中访问

Node.js: express + MySQL + Vue实现图片上传

  

        可以到下面链接获取文章中的代码。

        链接: https://pan.baidu.com/s/1t7bX0Nv3kggyf7IFzEffcA 提取码: 0000文章来源地址https://www.toymoban.com/news/detail-471374.html

到了这里,关于Node.js: express + MySQL + Vue实现图片上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一步步带你实现一个简单的express服务器,能让vue通过axios请求将图片上传到阿里云OSS

    上篇文章提到了如何用mock.js来模拟接口,方便在后端没有写好接口的时候也能顺利开发,本来计划这篇文章是讲一下用轮播图组件swiper来展示一下模拟接收到的数据和图片,但项目计划发生了变化,这个就推到后面再说。 mock模拟接口虽然很好用,但是在项目开发的时候还是

    2024年02月04日
    浏览(58)
  • node笔记_express结合formidable实现前后端的文件上传

    大家好,我是yma16,本期分享node

    2024年02月05日
    浏览(41)
  • node.js下载安装和报错大全(express、淘宝镜像、webpack、Vue)

    目录 一、概述 二、操作步骤 (一)下载node.js (二) 安装node.js (三)查看环境变量 (四)查看版本信息 (五)新建全局下载包和缓存包位置 (六)配置环境变量 (七)安装express(内嵌http模块) 安装成功 安装失败 解决办法一(最好的办法)  解决办法二(其次) (八

    2024年02月01日
    浏览(77)
  • 前端Vue Node.js + Express + MongoDB 构建的后端服务API接口

    构建一个使用 Vue.js 作为前端, Node.js + Express + MongoDB 作为后端服务的全栈应用涉及到多个步骤。这里简要概述整个过程,并提供一些基本的代码示例来帮助你开始。 安装 MongoDB: 根据你的操作系统从 MongoDB 官网 下载并安装 MongoDB。 启动 MongoDB 服务: 安装完成后,根据 MongoDB 的

    2024年04月14日
    浏览(55)
  • node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染

    大家好,我是yma16,本文分享关于 node+vue3+mysql前后分离开发范式——实现视频文件上传并渲染。 技术选型 前端:vite+vue3+antd 后端:node koa 数据库:mysql koa是一个现代的Node.js框架,可以用来构建Web应用程序。 Node.js的mime库 Node.js的mime库是用于根据文件扩展名获取对应的MIME类型

    2024年02月19日
    浏览(54)
  • node.js的下载安装详细步骤(还有安装配套的express、淘宝镜像、webpack、Vue)

    目录 一、概述 二、操作步骤 (一)下载node.js (二) 安装node.js (三)查看环境变量 (四)查看版本信息 (五)新建全局下载包和缓存包位置 (六)配置环境变量 (七)安装express(内嵌http模块) 安装成功 安装失败 解决办法一(最好的办法)  解决办法二(其次) (八

    2024年02月09日
    浏览(72)
  • 直接在html中引入Vue.js的cdn来实现一个简单的上传图片组件

    当使用 Vue.js 的 CDN 来实现一个简单的上传图片组件时,你可以利用 Vue 的数据绑定和事件处理能力,结合 HTML 和 CSS,轻松地创建一个交互式的图片上传界面。以下是一个示例: index.html TANKING https://afdian.net/item/ffa3292a337c11ee9a8c5254001e7c00

    2024年02月13日
    浏览(44)
  • Node + Express 后台开发 —— 上传、下载和发布

    前面我们已经完成了数据库的 增删改查 ,在弄一个 上传 图片、 下载 csv,一个最简单的后台开发就已完成,最后 部署 即可。 需求 需求 :做一个 个人简介 的表单提交,有 昵称 、 简介 和 头像 。后端能接收数据并保存到数据库。 接收不到数据 用 amis-editor (amis 低代码编

    2024年02月03日
    浏览(48)
  • 【node进阶】Express+Multer+Postman模拟文件上传功能

    ✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强!☀️ 💯 刷题网站:这段时间有许多的小伙伴在问有没有什么

    2024年02月02日
    浏览(41)
  • node.js中Express简介

    1.什么是Express 官方给出的概念:Express是基于Node.js平台,快速、开放、极简的web开发框架。 通俗理解:Express的作用和Node.js内置的http模块类似,是 专门用来创建web服务器的 Express的本质:就是一个npm上的第三方包,提供了快速创建Web服务器的便捷方法 2.进一步理解Express htt

    2024年02月08日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包