最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue2+element-ui+nodejs實現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫的方法

 更新時間:2024年04月12日 09:27:14   作者:至尊雞  
在Web開發(fā)中經(jīng)常需要使用圖片,有時候需要對圖片進行上傳,這篇文章主要給大家介紹了關于vue2+element-ui+nodejs實現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

記錄一下在做項目過程中實現(xiàn)圖片保存到數(shù)據(jù)庫,并且可以修改圖片的功能

先來說說怎么簡單實現(xiàn)圖片上傳到服務器這個功能

文件夾擺放

nodejs部分

先在app文件夾的創(chuàng)建index.js,在其中定義一個路由(為了更好的模塊化處理,直接用app.post也行)

const express = require('express')
const app = express()
const cors = require('cors')
const port = 3001
app.use(cors())
app.use(express.urlencoded({ extended: false }))
app.use(express.json())
/* 使用圖片路由 */
const imgRouter = require("../router/images.js");
app.use("/api", imgRouter);

然后在router文件夾中創(chuàng)建一個images.js

其中代碼如下

const express = require("express");
const router = express.Router();
// 引入multer
const multer = require("multer")
const fs=require("fs")
//導入數(shù)據(jù)庫
const db = require("../database/index");
//圖片上傳
router.post(
    "/imgload",
    multer({
      //設置文件存儲路徑
      dest: "public/images",
    }).array("file", 1),
    function (req, res, next) {
      console.log(req.body,"req.bodyreq.bodyreq.bodyreq.body");
      let files = req.files;
      let file = files[0];
      let fileInfo = {};
      file.originalname = Buffer.from(file.originalname, "latin1").toString(
        "utf8"
      );
      let path = "public/images/" + Date.now().toString() + file.originalname;
      fs.renameSync("./public/images/" + file.filename, path);
      console.log(path);
      
      db.query()

      //獲取文件基本信息
      fileInfo.type = file.mimetype;
      fileInfo.name = file.originalname;
      fileInfo.size = file.size;
      fileInfo.path = path;
      res.send({
        code: 200,
        msg: "OK",
        data: fileInfo,
      });
    }
)


module.exports = router;

其中代碼中有設置文件存儲路徑dest: "public/images",這個文件夾你可以先創(chuàng)建也可以不創(chuàng)建,他會自動幫你創(chuàng)建,他接收的圖片會在app文件夾中顯示出來,如果報錯沒有此文件夾,你可以先創(chuàng)建

vue部分

使用element-ui中的Upload 上傳組件,我的版本是2.8.2

 <template>
    <div>
    <el-upload
            class="upload-demo"
            ref="upload"
            action='http://localhost:3001/api/imgload'
            :data="form"
            :on-preview="handlePreview"
            :auto-upload="false"
            :on-success="handleUploadSuccess"
           
          >
            <el-button slot="trigger" size="small" type="primary"
              >選取文件</el-button
            >
            <div slot="tip" class="el-upload__tip">
              只能上傳jpg/png文件,且不超過500kb
            </div>
    </el-upload>
    <el-button type="primary" @click="submit">確 定</el-button>

    </div>
</template>
export default{
methods:{
    submit(){
 this.$refs.upload.submit();
}
}
    
}

其中action是后端接口圖片上傳修改都可以通過這個接口處理,點擊確定按鈕,圖片就會上傳到服務器,還可以設置成功上傳的回調(diào)函數(shù),這個具體查看官網(wǎng)說明文檔

這時候我們可以看到后端控制臺中有上傳的文件路徑

?和在public/images有如下圖片,圖片名字為什么這么奇怪,因為代碼中加上了時間戳函數(shù),你也可以加上自己的東西。

 自此,我們完成了圖片上傳到服務器的方法

接下來我們怎么把圖片插入數(shù)據(jù)庫呢,在這里我的方法是把圖片名稱和后綴加入的數(shù)據(jù)庫中(這個方法有局限性,后期如果遇到好點的方法再更新,現(xiàn)在先來實現(xiàn)效果)

在images.js我們遺留下了一個db.query(),這個是用來執(zhí)行數(shù)據(jù)庫語句的,先在app數(shù)據(jù)庫下創(chuàng)建images表

?在database的index.js文件中我們定義數(shù)據(jù)庫,xxx為你自己的數(shù)據(jù)庫屬性

const mysql = require("mysql");
const db = mysql.createPool({
    host: "xxxx",
    user: "xxx",
    password: "xxx",
    database: "app",
    multipleStatements: true
})

module.exports = db;

 配置好后,我們在image.js中加入數(shù)據(jù)庫語句,images.js代碼更新如下

const express = require("express");
const router = express.Router();
// 引入multer
const multer = require("multer")
const fs=require("fs")
//導入數(shù)據(jù)庫
const db = require("../database/index");
//圖片上傳
router.post(
    "/imgload",
    multer({
      //設置文件存儲路徑
      dest: "public/images",
    }).array("file", 1),
    function (req, res, next) {
      console.log(req.body,"req.bodyreq.bodyreq.bodyreq.body");
      let files = req.files;
      let file = files[0];
      let fileInfo = {};
      file.originalname = Buffer.from(file.originalname, "latin1").toString(
        "utf8"
      );
      let path = "public/images/" + Date.now().toString() + file.originalname;
      fs.renameSync("./public/images/" + file.filename, path);
      console.log(path);
      let sql=`insert into images (imagesname) VALUES ('${path}');`
      db.query(sql)

      //獲取文件基本信息
      fileInfo.type = file.mimetype;
      fileInfo.name = file.originalname;
      fileInfo.size = file.size;
      fileInfo.path = path;
      res.send({
        code: 200,
        msg: "OK",
        data: fileInfo,
      });
    }
)

module.exports = router;

在前端頁面提交圖片,刷新數(shù)據(jù)庫,效果如下

自此我們完成了,圖片路徑存放數(shù)據(jù)庫的操作

接下來說說在項目中經(jīng)常使用到的功能就是上傳圖片的

如何修改圖片?

先來說說我的實現(xiàn)思路吧,前面我們已經(jīng)實現(xiàn)了圖片上傳和存放數(shù)據(jù)庫的功能,一般我們把圖片和用戶的唯一標識(用戶編號)放在一個表里面,這樣我們可以通過sql的updata語句來實現(xiàn)修改用戶的圖片的操作。

那怎么把圖片顯示到用戶的界面呢?

通過掛載靜態(tài)資源路徑訪問服務器的文件夾,前面上傳圖片時候服務器創(chuàng)建了public/images文件夾,在里面存放了我們上傳的圖片,在前端里面我們可以通過拼接src路徑來實現(xiàn)圖片的顯示。假如你上傳的圖片攜帶了參數(shù)如用戶編號(如何攜帶參數(shù),element-ui的Upload組件有說明),我們可以重寫一下存放到數(shù)據(jù)庫的圖片名稱

在images.js執(zhí)行sql語句之前可以加上以下語句

let imgName=req.body.userId+fileInfo.name

這樣我們就可以獲得,如123圖像.jpg的圖片路徑存放到數(shù)據(jù)庫

使用nodejs的express進行靜態(tài)資源掛載

app.use("/api/images", express.static("./public/images"));
app.get("/api/images/:filename", (req, res) => {
  const filename = req.params.filename;
  const imagePath = path.join(__dirname, "public/images", filename);

  fs.access(imagePath, fs.constants.F_OK, (error) => {
    if (error) {
      // 圖片不存在,返回404狀態(tài)碼
      res.status(404).send("圖片不存在");
    } else {
      // 圖片存在
      res.status(200).send("圖片存在");
    }
  });
});

在前端獲取圖片可以src動態(tài)拼接

<img :src="掛載靜態(tài)資源路徑 + 請求回來帶圖片的數(shù)據(jù)名稱" style="width: 100%;height: 100%;"/>

掛載靜態(tài)資源路徑即上面代碼中的/api/images,通過http://api/imageshttp://127.0.0.1//123.png即可訪問到圖片,前端請求只需要把圖片名稱返回即可。

如果有更加好的方法可以和我交流一下,我這個屬于笨方法,哈哈哈

總結(jié)

到此這篇關于vue2+element-ui+nodejs實現(xiàn)圖片上傳和修改圖片到數(shù)據(jù)庫的文章就介紹到這了,更多相關vue2圖片上傳和修改圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue項目退出登錄清除store數(shù)據(jù)的三種方法

    vue項目退出登錄清除store數(shù)據(jù)的三種方法

    最近使用vue做用戶的登錄/退出,在開發(fā)過程中遇到的一些問題,記錄下來,下面這篇文章主要給大家介紹了關于vue項目退出登錄清除store數(shù)據(jù)的三種方法,需要的朋友可以參考下
    2022-09-09
  • Vue中使用vux配置代碼詳解

    Vue中使用vux配置代碼詳解

    這篇文章主要介紹了Vue中使用vux配置代碼詳解,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • vue+Element實現(xiàn)分頁效果

    vue+Element實現(xiàn)分頁效果

    這篇文章主要為大家詳細介紹了vue+Element實現(xiàn)分頁效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue Ajax跨域請求實例詳解

    Vue Ajax跨域請求實例詳解

    這篇文章主要介紹了Vue Ajax跨域請求實例詳解,需要的朋友可以參考下
    2017-06-06
  • Vue3?+?MQTT實現(xiàn)前端與硬件設備直接通訊(附完整代碼解析)

    Vue3?+?MQTT實現(xiàn)前端與硬件設備直接通訊(附完整代碼解析)

    MQTT作為一種低開銷、低帶寬占用的即時通訊協(xié)議,使其在物聯(lián)網(wǎng)、小型設備、移動應用等方面有著廣泛的應用,這篇文章主要介紹了Vue3?+?MQTT實現(xiàn)前端與硬件設備直接通訊的相關資料,需要的朋友可以參考下
    2025-10-10
  • vue單應用在ios系統(tǒng)中實現(xiàn)微信分享功能操作

    vue單應用在ios系統(tǒng)中實現(xiàn)微信分享功能操作

    這篇文章主要介紹了vue單應用在ios系統(tǒng)中實現(xiàn)微信分享功能操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 深入了解Vue中雙向數(shù)據(jù)綁定原理

    深入了解Vue中雙向數(shù)據(jù)綁定原理

    vue是一個mvvm框架,即數(shù)據(jù)雙向綁定,即當數(shù)據(jù)發(fā)生變化的時候,視圖也就發(fā)生變化,當視圖發(fā)生變化的時候,數(shù)據(jù)也會跟著同步變化。本文將通過示例詳解其中原理,需要的可以參考一下
    2022-05-05
  • vue+js實現(xiàn)微信上傳圖片選擇功能

    vue+js實現(xiàn)微信上傳圖片選擇功能

    這篇文章主要為大家詳細介紹了vue+js實現(xiàn)微信上傳圖片選擇功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Vue中使用JsonView來展示Json樹的實例代碼

    Vue中使用JsonView來展示Json樹的實例代碼

    這篇文章主要介紹了Vue之使用JsonView來展示Json樹的實例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 淺談基于Vue.js的移動組件庫cube-ui

    淺談基于Vue.js的移動組件庫cube-ui

    這篇文章主要介紹了基于Vue.js的移動組件庫cube-ui,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

城固县| 环江| 东源县| 河津市| 荣成市| 浪卡子县| 溆浦县| 康保县| 黔东| 晋江市| 台安县| 拜泉县| 渝北区| 叙永县| 新邵县| 永仁县| 翁源县| 安宁市| 肇庆市| 天祝| 宣威市| 永康市| 平陆县| 苍溪县| 招远市| 禄劝| 梓潼县| 共和县| 永州市| 蛟河市| 固始县| 视频| 泉州市| 荔浦县| 镇巴县| 肃北| 大田县| 万全县| 荆门市| 外汇| 连城县|