摘要:在自己做一個簡單的后臺管理系統(tǒng)時,用的是作本地數(shù)據(jù)庫,然后用了的組件來實現(xiàn)圖片的上傳,中間有遇到那么點小坑,這里記錄下,比較坑的一點就是,不知道文件的命名不能帶空格,然后改了好久文件這里的話,就是簡單點的使用圖形界面框架的上傳組件,然后
在自己做一個簡單的后臺管理系統(tǒng)時,用的是node作本地數(shù)據(jù)庫,然后用了Element-ui的upload組件來實現(xiàn)圖片的上傳,中間有遇到那么點小坑,這里記錄下,比較坑的一點就是,不知道文件的命名不能帶空格,然后改了好久1.index.vue文件
這里的話,就是簡單點的使用圖形界面框架Element-ui的上傳組件,然后,action就是服務器端的地址,我這里使用了代理,將localhost:8080代理到你使用node作為服務器的地址就可以了
2.代理文件 將文件拖到此處,或點擊上傳
我這里使用的是vue-cli3腳手架來搭建的項目,所以,自己在項目的根目錄下創(chuàng)建一個vue.config.js來做一些配置
module.exports = { devServer: { port: 8080, headers: { }, inline: true, overlay: true, stats: "errors-only", proxy: { "/api": { target: "http://127.0.0.1:3000", changeOrigin: true // 是否跨域 } } }, };3.node服務器端文件
這里很重要的一點就是設置靜態(tài)資源目錄
app.use("/serverImage", express.static(path.join(__dirname, "serverImage")));
對圖片上傳進行了方法的封裝
const fs = require("fs"); const path = require("path"); /* formidable用于解析表單數(shù)據(jù),特別是文件上傳 */ const formidable = require("formidable"); /* 用于時間格式化 */ const formatTime = require("silly-datetime"); /* 圖片上傳 */ module.exports = (req, res) => { /* 創(chuàng)建上傳表單 */ let form = new formidable.IncomingForm(); /* 設置編碼格式 */ form.encoding = "utf-8"; /* 設置上傳目錄(這個目錄必須先創(chuàng)建好) */ form.uploadDir = path.join(__dirname, "../serverImage"); /* 保留文件后綴名 */ form.keepExtensions = true; /* 設置文件大小 */ form.maxFieldsSize = 2 * 1024 *1024; /* 格式化form數(shù)據(jù) */ form.parse(req, (err, fields, files) => { let file = files.file; /* 如果出錯,則攔截 */ if(err) { return res.send({"status": 500, msg: "服務器內(nèi)部錯誤", result: ""}); } if(file.size > form.maxFieldsSize) { fs.unlink(file.path); return res.send({"status": -1, "msg": "圖片不能超過2M", result: ""}); } /* 存儲后綴名 */ let extName = ""; switch (file.type) { case "image/png": extName = "png"; break; case "image/x-png": extName = "png"; break; case "image/jpg": extName = "jpg"; break; case "image/jpeg": extName = "jpg"; break; } if(extName.length == 0) { return res.send({"status": -1, "msg": "只支持jpg和png格式圖片", result: ""}); } /* 拼接新的文件名 */ let time = formatTime.format(new Date(), "YYYYMMDDHHmmss"); let num = Math.floor(Math.random() * 8999 + 10000); let imageName = `${time}_${num}.${extName}`; let newPath = form.uploadDir + "/" + imageName; /* 更改名字和路徑 */ fs.rename(file.path, newPath, (err) => { if(err) { return res.send({"status": -1, "msg": "圖片上傳失敗", result: ""}); } else { return res.send({"status": 200, "msg": "圖片上傳成功", result: {url: `http://localhost:3000/serverImage/${imageName}`}}); } }) }) };
方法的調(diào)用
const express = require("express"); const router = express.Router(); const uploadImg = require("./uploadImg"); /* 上傳圖片 */ router.post("/upload", (req, res) => { uploadImg(req, res); }); module.exports = router;
服務器端入口文件
const express = require("express"); const app = express(); const path = require("path"); /* body-parser是一個HTTP請求體解析的中間件 * 使用這個模塊可以解析JSON、Raw、文本、URL-encoded格式的請求體 * */ const bodyParser = require("body-parser"); const dataBaseOperate = require("./database/operate"); /* 以application/json格式解析數(shù)據(jù) */ app.use(bodyParser.json()); /* 以application/x-www-form-urlencoded格式解析數(shù)據(jù) */ app.use(bodyParser.urlencoded({ extended: false })); /* 設置靜態(tài)資源目錄 */ app.use("/serverImage", express.static(path.join(__dirname, "serverImage"))); app.use("/api", dataBaseOperate); app.listen(3000, () => { console.log("server is listening to http://localhost:3000") });4.小結(jié)下
對于接口文件的返回,這里使用了body-parser這個中間件來對node返回的body進行json格式的解析
很重要的一點就是設置靜態(tài)資源目錄,不然的話就會報錯,找不到文件或者文件夾
設置靜態(tài)資源目錄,用于存儲服務器端的靜態(tài)資源文件
app.use("/serverImage", express.static(path.join(__dirname, "serverImage")));
然后就是對文件的命名不能出現(xiàn)空格
文件的鏈接可以使用本地服務器端的url地址
正在努力學習中,若對你的學習有幫助,留下你的印記唄(點個贊咯^_^)
往期好文推薦:
判斷ios和Android及PC端
webpack打包(有面試題)
純css實現(xiàn)瀑布流(multi-column多列及flex布局)
實現(xiàn)單行及多行文字超出后加省略號
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/102982.html
摘要:目前覺得對我有用的是和。后者可以在本地調(diào)試頁面,對于手機頁面尤其有用。這次主要說一下,我并沒有實現(xiàn)所有的功能,只是實現(xiàn)單圖片上傳這一個功能,其他的再摸索嘍。目前就這樣,下次弄出來了多圖片上傳我再接著更新。 這兩天在看《nodejs權威指南》,這本書看了好久了,但是讀的一直不細,這次才好好看了一遍。 收獲還是蠻多的,主要在于wenpack使用的一些細節(jié)問題,有點茅塞頓悟的體驗吧,另外在n...
摘要:文章首發(fā)于藍鍋鍋博客主要是用到的接口,既然是的,所支持的瀏覽器我就不多說啦,老生常談的問題了,遠離,珍惜生命。目錄路徑為目錄路徑為文章首發(fā)于藍鍋鍋博客,歡迎交流,共同進步。 我們在開發(fā)系統(tǒng)時,處理圖片上傳是不可避免的,例如使用thinkphp的肯定很熟悉import(@.ORG.UploadFile);的上傳方式,今天我們來講一個使用html5 base64上傳圖片的方法。文章首發(fā)于藍...
摘要:文章首發(fā)于藍鍋鍋博客主要是用到的接口,既然是的,所支持的瀏覽器我就不多說啦,老生常談的問題了,遠離,珍惜生命。目錄路徑為目錄路徑為文章首發(fā)于藍鍋鍋博客,歡迎交流,共同進步。 我們在開發(fā)系統(tǒng)時,處理圖片上傳是不可避免的,例如使用thinkphp的肯定很熟悉import(@.ORG.UploadFile);的上傳方式,今天我們來講一個使用html5 base64上傳圖片的方法。文章首發(fā)于藍...
摘要:多用戶博客系統(tǒng)該多用戶博客系統(tǒng),是在之前一開始學習的使用的時候,大佬說讓去做一個系統(tǒng)性的項目,這樣前后端兼顧,從里面去系統(tǒng)性的總結(jié)東西,索性就做了一個這個,項目的架子是根據(jù)一個開源項目的指導進行入坑的,陸陸續(xù)續(xù)用了四個月時間,由于是剛步入大 多用戶博客系統(tǒng) 該多用戶博客系統(tǒng),是在之前一開始學習node的使用的時候,大佬說讓去做一個系統(tǒng)性的項目,這樣前后端兼顧,從里面去系統(tǒng)性的總結(jié)東西...
閱讀 2475·2023-04-26 02:54
閱讀 2411·2021-10-14 09:43
閱讀 3506·2021-09-22 15:19
閱讀 2904·2019-08-30 15:44
閱讀 2765·2019-08-30 12:54
閱讀 1051·2019-08-29 18:43
閱讀 1998·2019-08-29 17:12
閱讀 1388·2019-08-29 16:40