摘要:在自己做一个简单的后台管理系统时,用的是作本地数据库,然后用了的组件来实现图片的上传,中间有遇到那么点小坑,这里记录下,比较坑的一点就是,不知道文件的命名不能带空格,然后改了好久文件这里的话,就是简单点的使用图形界面框架的上传组件,然后
在自己做一个简单的后台管理系统时,用的是node作本地数据库,然后用了Element-ui的upload组件来实现图片的上传,中间有遇到那么点小坑,这里记录下,比较坑的一点就是,不知道文件的命名不能带空格,然后改了好久1.index.vue文件
这里的话,就是简单点的使用图形界面框架Element-ui的上传组件,然后,action就是服务器端的地址,我这里使用了代理,将localhost:8080代理到你使用node作为服务器的地址就可以了
2.代理文件 将文件拖到此处,或点击上传
我这里使用的是vue-cli3脚手架来搭建的项目,所以,自己在项目的根目录下创建一个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服务器端文件
这里很重要的一点就是设置静态资源目录
app.use("/serverImage", express.static(path.join(__dirname, "serverImage")));
对图片上传进行了方法的封装
const fs = require("fs"); const path = require("path"); /* formidable用于解析表单数据,特别是文件上传 */ const formidable = require("formidable"); /* 用于时间格式化 */ const formatTime = require("silly-datetime"); /* 图片上传 */ module.exports = (req, res) => { /* 创建上传表单 */ let form = new formidable.IncomingForm(); /* 设置编码格式 */ form.encoding = "utf-8"; /* 设置上传目录(这个目录必须先创建好) */ form.uploadDir = path.join(__dirname, "../serverImage"); /* 保留文件后缀名 */ form.keepExtensions = true; /* 设置文件大小 */ form.maxFieldsSize = 2 * 1024 *1024; /* 格式化form数据 */ form.parse(req, (err, fields, files) => { let file = files.file; /* 如果出错,则拦截 */ if(err) { return res.send({"status": 500, msg: "服务器内部错误", 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}`}}); } }) }) };
方法的调用
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格式解析数据 */ app.use(bodyParser.json()); /* 以application/x-www-form-urlencoded格式解析数据 */ app.use(bodyParser.urlencoded({ extended: false })); /* 设置静态资源目录 */ 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.小结下
对于接口文件的返回,这里使用了body-parser这个中间件来对node返回的body进行json格式的解析
很重要的一点就是设置静态资源目录,不然的话就会报错,找不到文件或者文件夹
设置静态资源目录,用于存储服务器端的静态资源文件
app.use("/serverImage", express.static(path.join(__dirname, "serverImage")));
然后就是对文件的命名不能出现空格
文件的链接可以使用本地服务器端的url地址
正在努力学习中,若对你的学习有帮助,留下你的印记呗(点个赞咯^_^)
往期好文推荐:
判断ios和Android及PC端
webpack打包(有面试题)
纯css实现瀑布流(multi-column多列及flex布局)
实现单行及多行文字超出后加省略号
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/102982.html
摘要:目前觉得对我有用的是和。后者可以在本地调试页面,对于手机页面尤其有用。这次主要说一下,我并没有实现所有的功能,只是实现单图片上传这一个功能,其他的再摸索喽。目前就这样,下次弄出来了多图片上传我再接着更新。 这两天在看《nodejs权威指南》,这本书看了好久了,但是读的一直不细,这次才好好看了一遍。 收获还是蛮多的,主要在于wenpack使用的一些细节问题,有点茅塞顿悟的体验吧,另外在n...
摘要:文章首发于蓝锅锅博客主要是用到的接口,既然是的,所支持的浏览器我就不多说啦,老生常谈的问题了,远离,珍惜生命。目录路径为目录路径为文章首发于蓝锅锅博客,欢迎交流,共同进步。 我们在开发系统时,处理图片上传是不可避免的,例如使用thinkphp的肯定很熟悉import(@.ORG.UploadFile);的上传方式,今天我们来讲一个使用html5 base64上传图片的方法。文章首发于蓝...
摘要:文章首发于蓝锅锅博客主要是用到的接口,既然是的,所支持的浏览器我就不多说啦,老生常谈的问题了,远离,珍惜生命。目录路径为目录路径为文章首发于蓝锅锅博客,欢迎交流,共同进步。 我们在开发系统时,处理图片上传是不可避免的,例如使用thinkphp的肯定很熟悉import(@.ORG.UploadFile);的上传方式,今天我们来讲一个使用html5 base64上传图片的方法。文章首发于蓝...
摘要:多用户博客系统该多用户博客系统,是在之前一开始学习的使用的时候,大佬说让去做一个系统性的项目,这样前后端兼顾,从里面去系统性的总结东西,索性就做了一个这个,项目的架子是根据一个开源项目的指导进行入坑的,陆陆续续用了四个月时间,由于是刚步入大 多用户博客系统 该多用户博客系统,是在之前一开始学习node的使用的时候,大佬说让去做一个系统性的项目,这样前后端兼顾,从里面去系统性的总结东西...
阅读 2363·2023-04-26 02:54
阅读 2269·2021-10-14 09:43
阅读 3298·2021-09-22 15:19
阅读 2812·2019-08-30 15:44
阅读 2682·2019-08-30 12:54
阅读 955·2019-08-29 18:43
阅读 1914·2019-08-29 17:12
阅读 1278·2019-08-29 16:40