摘要:在自己做一個(gè)簡單的后臺(tái)管理系統(tǒng)時(shí),用的是作本地?cái)?shù)據(jù)庫,然后用了的組件來實(shí)現(xiàn)圖片的上傳,中間有遇到那么點(diǎn)小坑,這里記錄下,比較坑的一點(diǎn)就是,不知道文件的命名不能帶空格,然后改了好久文件這里的話,就是簡單點(diǎn)的使用圖形界面框架的上傳組件,然后
在自己做一個(gè)簡單的后臺(tái)管理系統(tǒng)時(shí),用的是node作本地?cái)?shù)據(jù)庫,然后用了Element-ui的upload組件來實(shí)現(xiàn)圖片的上傳,中間有遇到那么點(diǎn)小坑,這里記錄下,比較坑的一點(diǎn)就是,不知道文件的命名不能帶空格,然后改了好久1.index.vue文件
這里的話,就是簡單點(diǎn)的使用圖形界面框架Element-ui的上傳組件,然后,action就是服務(wù)器端的地址,我這里使用了代理,將localhost:8080代理到你使用node作為服務(wù)器的地址就可以了
2.代理文件 將文件拖到此處,或點(diǎn)擊上傳
我這里使用的是vue-cli3腳手架來搭建的項(xiàng)目,所以,自己在項(xiàng)目的根目錄下創(chuàng)建一個(gè)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服務(wù)器端文件
這里很重要的一點(diǎn)就是設(shè)置靜態(tài)資源目錄
app.use("/serverImage", express.static(path.join(__dirname, "serverImage")));
對(duì)圖片上傳進(jìn)行了方法的封裝
const fs = require("fs"); const path = require("path"); /* formidable用于解析表單數(shù)據(jù),特別是文件上傳 */ const formidable = require("formidable"); /* 用于時(shí)間格式化 */ const formatTime = require("silly-datetime"); /* 圖片上傳 */ module.exports = (req, res) => { /* 創(chuàng)建上傳表單 */ let form = new formidable.IncomingForm(); /* 設(shè)置編碼格式 */ form.encoding = "utf-8"; /* 設(shè)置上傳目錄(這個(gè)目錄必須先創(chuàng)建好) */ form.uploadDir = path.join(__dirname, "../serverImage"); /* 保留文件后綴名 */ form.keepExtensions = true; /* 設(shè)置文件大小 */ form.maxFieldsSize = 2 * 1024 *1024; /* 格式化form數(shù)據(jù) */ form.parse(req, (err, fields, files) => { let file = files.file; /* 如果出錯(cuò),則攔截 */ if(err) { return res.send({"status": 500, msg: "服務(wù)器內(nèi)部錯(cuò)誤", result: ""}); } if(file.size > form.maxFieldsSize) { fs.unlink(file.path); return res.send({"status": -1, "msg": "圖片不能超過2M", result: ""}); } /* 存儲(chǔ)后綴名 */ 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;
服務(wù)器端入口文件
const express = require("express"); const app = express(); const path = require("path"); /* body-parser是一個(gè)HTTP請求體解析的中間件 * 使用這個(gè)模塊可以解析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 })); /* 設(shè)置靜態(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é)下
對(duì)于接口文件的返回,這里使用了body-parser這個(gè)中間件來對(duì)node返回的body進(jìn)行json格式的解析
很重要的一點(diǎn)就是設(shè)置靜態(tài)資源目錄,不然的話就會(huì)報(bào)錯(cuò),找不到文件或者文件夾
設(shè)置靜態(tài)資源目錄,用于存儲(chǔ)服務(wù)器端的靜態(tài)資源文件
app.use("/serverImage", express.static(path.join(__dirname, "serverImage")));
然后就是對(duì)文件的命名不能出現(xiàn)空格
文件的鏈接可以使用本地服務(wù)器端的url地址
正在努力學(xué)習(xí)中,若對(duì)你的學(xué)習(xí)有幫助,留下你的印記唄(點(diǎn)個(gè)贊咯^_^)
往期好文推薦:
判斷ios和Android及PC端
webpack打包(有面試題)
純css實(shí)現(xiàn)瀑布流(multi-column多列及flex布局)
實(shí)現(xiàn)單行及多行文字超出后加省略號(hào)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/102982.html
摘要:目前覺得對(duì)我有用的是和。后者可以在本地調(diào)試頁面,對(duì)于手機(jī)頁面尤其有用。這次主要說一下,我并沒有實(shí)現(xiàn)所有的功能,只是實(shí)現(xiàn)單圖片上傳這一個(gè)功能,其他的再摸索嘍。目前就這樣,下次弄出來了多圖片上傳我再接著更新。 這兩天在看《nodejs權(quán)威指南》,這本書看了好久了,但是讀的一直不細(xì),這次才好好看了一遍。 收獲還是蠻多的,主要在于wenpack使用的一些細(xì)節(jié)問題,有點(diǎn)茅塞頓悟的體驗(yàn)吧,另外在n...
摘要:文章首發(fā)于藍(lán)鍋鍋博客主要是用到的接口,既然是的,所支持的瀏覽器我就不多說啦,老生常談的問題了,遠(yuǎn)離,珍惜生命。目錄路徑為目錄路徑為文章首發(fā)于藍(lán)鍋鍋博客,歡迎交流,共同進(jìn)步。 我們在開發(fā)系統(tǒng)時(shí),處理圖片上傳是不可避免的,例如使用thinkphp的肯定很熟悉import(@.ORG.UploadFile);的上傳方式,今天我們來講一個(gè)使用html5 base64上傳圖片的方法。文章首發(fā)于藍(lán)...
摘要:文章首發(fā)于藍(lán)鍋鍋博客主要是用到的接口,既然是的,所支持的瀏覽器我就不多說啦,老生常談的問題了,遠(yuǎn)離,珍惜生命。目錄路徑為目錄路徑為文章首發(fā)于藍(lán)鍋鍋博客,歡迎交流,共同進(jìn)步。 我們在開發(fā)系統(tǒng)時(shí),處理圖片上傳是不可避免的,例如使用thinkphp的肯定很熟悉import(@.ORG.UploadFile);的上傳方式,今天我們來講一個(gè)使用html5 base64上傳圖片的方法。文章首發(fā)于藍(lán)...
摘要:多用戶博客系統(tǒng)該多用戶博客系統(tǒng),是在之前一開始學(xué)習(xí)的使用的時(shí)候,大佬說讓去做一個(gè)系統(tǒng)性的項(xiàng)目,這樣前后端兼顧,從里面去系統(tǒng)性的總結(jié)東西,索性就做了一個(gè)這個(gè),項(xiàng)目的架子是根據(jù)一個(gè)開源項(xiàng)目的指導(dǎo)進(jìn)行入坑的,陸陸續(xù)續(xù)用了四個(gè)月時(shí)間,由于是剛步入大 多用戶博客系統(tǒng) 該多用戶博客系統(tǒng),是在之前一開始學(xué)習(xí)node的使用的時(shí)候,大佬說讓去做一個(gè)系統(tǒng)性的項(xiàng)目,這樣前后端兼顧,從里面去系統(tǒng)性的總結(jié)東西...
閱讀 2391·2023-04-26 02:54
閱讀 2315·2021-10-14 09:43
閱讀 3358·2021-09-22 15:19
閱讀 2843·2019-08-30 15:44
閱讀 2699·2019-08-30 12:54
閱讀 983·2019-08-29 18:43
閱讀 1936·2019-08-29 17:12
閱讀 1330·2019-08-29 16:40