Express+MySQL实现图片上传到服务器并把路径保存到数据库中

demo准备:mysql5.7.20 express4.0 处理图片文件的中间件Multer

  1. 先搭建服务器并展示html页面
const express = require("express");
const app = express();
app.engine('html',require("html-art-template")) // 安装解析html文件的模板引擎,cnpm i html-art-template -S
app.get("/",(req,res)=>{
	res.render("file.html")
})
app.listen(3001)
  1. 引入mysql和Multer
const mysql = require("mysql");
const multer = require("multer");
const upload = multer({dest:"uploads/"}) // 指定图片的存储位置

var connmysql = mysql.createConnection({
	host:"127.0.0.1",
	port:"3306",
	user:"root",
	password:"2232723904",
	database:"picture"
})
connmysql.connect()
  1. 接受客户端传过来的图片文件使用post
const bodyParse = require("body-parse"); // 处理post请求的中间件
const fs = require("fs"); // 读写文件的模块
const path = require("path") // 处理路径的模块
app.use(bodyParse.urlencoded({
extended:false // 这里是返回数据为false则是对象或者数组形式,为true则为任意数据类型
}))
app.use(bodyParse.json()) // 指定post请求的数据为json数据

app.post('/picture',upload.single("imges"),(req,res)=>{
var imges = req.file;
	fs.readFile(imges.path,(err,data)=>{ // 写入文件
  		if(err){
            console.log(err,"图片读取失败")
            return 
          }
          var imgesori = imges.originalname; // 图片名称
          var radname = Date.now()+parseInt(Math.random()*999)+parse(Math.random()*666) // 赋给图片的名称用时间戳+随机数获取
          var oriname = imgesori.lasrIndexof(".");
          var hzm = imgesori.substring(oriname,imgesori.length) // 图片后缀名
          var pic = radname+pic // 拼接处一个完整的图片名称
          fs.wrireFile(path.join(__dirname:'./public/image'+pic),data,(err) =>{
    			if(err){
                   console.log(err,"图片写入失败")
                  }
                  res.send({code:-1,msg:"图片上传失败"})
                  return
                  // 将图片的路径保存到数据库
                  var picPath = "http://localhost:3001/public/image/"+pic
                  var insertPic = "insert into pic_table(pic_router) values('"+picPath+"')"
                  connmysql.query(insertPic,(err,result)=>{
        				if(err){
							 console.log(err,"图片路径储存数据库失败")
						}	
						res.send({code:200,msg:"图片上传成功",urls:picPath })					
        })
    })
  })
})

  1. 客户端页面
<body>
    <div class="outbox">
        <div class="skbox">
            <a href="javascript:void(0)">上传<input type="file" name="pic" id="pic"
                    accept="image/jpeg,image/jpg,image/png,image/svg"></a>
        </div>
        <span></span>
        <div class="imgbox"><img></div>
    </div>
</body>
  1. ajax部分
$(function(){
// 封装ajax函数
function update(url, formdata, callback) {
        $.ajax({
            url: url,
            type: "POST",
            data: formdata,
            dataType: "json",
            processData: false, // jQuery不要去处理发送的数据
            contentType: false,
            success: function (data) {
                callback(data)
            },
            error: function (err) {
                console.log("服务器错误!", err);
                $("span").text("服务器错误,请重新上传!")
            }

        })
    }
// 执行input时间时调用
$("input").change(function () {
        var imgSize = 4000000
        var zzz = /\.(jpg|png|jpeg|bmp)/i
        var str = this.files[0].name
        var sizes = this.files[0].size
        var last = str.lastIndexOf('.')
        var jq = str.substring(last, last.length).toLowerCase();
        if (zzz.test(jq) && sizes <= imgSize) {

            var url = "/picture"
            var imgFiles = $("#pic")[0].files[0]
            var formdata = new FormData()
            formdata.append("imges", imgFiles)
            update(url, formdata, function (data) {
                console.log(data)
                if (data.code < 0) {
                    $("span").text(data.msg)
                }
                $("span").text(data.msg)
                var localsto = window.localStorage
                localStorage.setItem("src", data.urls)
                $('.imgbox img').attr('src', localsto.src);

            })

        } else {
            alert("请选择一张正确的图片并且大小不能大于4M")
        }
    })
    
// 将服务端返回的数据保存在localStorage中
window.onload = function(){
	 var localsto = window.localStorage
     $('.imgbox img').attr('src', localsto.src);
 }
})
  1. 服务端完整app.js
const express = require('express')
const app = express()
const mysql = require("mysql")
const os = require("os")
const multer = require("multer")
const upload = multer({
    dest: 'uploads/'
})
const bodyParser = require("body-parser")
const fs = require("fs")
const path = require("path")

var connsql = mysql.createConnection({
    host: "127.0.0.1",
    port: "3306",
    user: "root",
    password: "2232723904",
    database: "picture",
})
connsql.connect()

app.engine('html', require('express-art-template'))
app.use('/public/', express.static('./public/'))
app.use(bodyParser.urlencoded({
    extended: false
}))
app.use(bodyParser.json())

app.get('/', (req, res) => {
    res.render('file.html')
})

app.post('/picture', upload.single('imges'), (req, res) => {
    var imges = req.file
    fs.readFile(imges.path, (err, data) => {
        if (err) {
            console.log("图片上传失败")
            return;
        }
        var imgesori = imges.originalname
        var radname = Date.now() + parseInt(Math.random() * 999)
        var oriname = imgesori.lastIndexOf('.')
        var hzm = imgesori.substring(oriname, oriname.length)
        var pic = radname + hzm
        fs.writeFile(path.join(__dirname, './public/image/' + pic), data, (err) => {
            if (err) {
                console.log("图片写入失败!")
                res.send({
                    code: -1,
                    msg: "图片上传失败!"
                })
                return
            }

            const couter = os.networkInterfaces()
            for (var cm in couter) {
                var cms = couter[cm]
            }
            var picPath = "http://"+cms[1].address + ':3001' + '/public/image/' + pic
            var insertPic = "insert into pic_table(pic_router) values('" + picPath + "')"
            connsql.query(insertPic, (err, result) => {
                if (err) {
                    console.log("保存到数据库失败!")
                }
                res.send({
                    code: 200,
                    msg: "图片上传成功",
                    urls: picPath
                })
            })
        })
    })
})


app.listen(3001)

ps:app.js中的路径时通过node中提供的os模块获取到的

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个使用 Node.js 和 MySQL 连接数据库,并将数据渲染到前端网页的示例代码。 首先,需要安装 `mysql` 和 `express` 模块。 ```bash npm install mysql express ``` 然后,创建一个 `app.js` 文件,编写以下代码: ```javascript const express = require('express'); const mysql = require('mysql'); // 创建 MySQL 连接池 const pool = mysql.createPool({ host: 'localhost', user: 'username', password: 'password', database: 'mydb', }); // 创建 Express 应用程序 const app = express(); // 处理根路径的 GET 请求 app.get('/', (req, res) => { // 从数据库获取数据 pool.query('SELECT * FROM users', (error, results, fields) => { if (error) throw error; // 将数据渲染到 HTML 页面 const html = ` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Users</title> </head> <body> <h1>Users</h1> <table> <thead> <tr> <th>ID</th> <th>Name</th> <th>Email</th> </tr> </thead> <tbody> ${results.map(user => ` <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.email}</td> </tr> `).join('')} </tbody> </table> </body> </html> `; // 发送 HTML 页面到客户端 res.send(html); }); }); // 启动服务器 app.listen(3000, () => { console.log('Server is running at http://localhost:3000'); }); ``` 代码说明: 1. 首先,使用 `mysql` 模块创建一个 MySQL 连接池。 2. 然后,使用 `express` 模块创建一个 Express 应用程序。 3. 处理根路径的 GET 请求,从数据库获取数据,并将数据渲染到 HTML 页面。 4. 启动服务器,监听 3000 端口。 注意:以上代码只是一个简单示例,具体实现要根据具体的需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰消叶散

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值