当前位置: 首页 > news >正文

vue小记——上传图片小组件

 个人笔记

前端:

<template><el-uploadclass="avatar-uploader"name="image"action="http://127.0.0.1:3000/api/image/upload":show-file-list="false":headers="headerObj":data="DataForm":on-success="handleAvatarSuccess":before-upload="beforeAvatarUpload":on-preview="handlePictureCardPreview"><img v-if="imageUrl" :src="imageUrl" class="avatar" /><i v-else class="el-icon-plus avatar-uploader-icon"></i></el-upload>
</template><script>
export default{date(){return:{headerObj: {Authorization: localStorage.getItem("mytoken"),},imageUrl:"",DataForm: {},}},methods:{//控制图片预览窗口的显示与隐藏beforeAvatarUpload(file) {this.DataForm = {code: this.ruleForm.code,user: this.$store.getters.user.name,};console.log(this.DataForm);console.log(file.type);const isJPG = file.type === "image/jpeg";const isPNG = file.type === "image/png";const isLt2M = file.size / 1024 / 1024 < 2;if (!(isJPG || isPNG)) {this.$message.error("上传头像图片只能是 JPG 格式!");}if (!isLt2M) {this.$message.error("上传头像图片大小不能超过 2MB!");}return (isPNG || isJPG) && isLt2M;},handleAvatarSuccess(res, file) {if (res.status == "1") return this.$message.error(res.message);this.imageUrl = res.imageUrl;this.$message.success("修改头像成功");console.log(this.DataForm);},handlePictureCardPreview(file) {this.dialogImageUrl = file.url;this.dialogVisible = true;},}
}</script>

后端(node.js):

router:

const express= require('express')
const router=express.Router()
const imageHandler=require('../router_handler/images.js')
const multer=require('multer')//磁盘存储引擎,可以控制文件的存储,省略的话这些文件会保存在内存中,不会写入磁盘
const storage=multer.diskStorage({destination:(req,res,cb)=>{//控制文件的存储路径cb(null,'public/images')},filename:function(req,file,cb){cb(null,file.fieldname + '-' + Date.now() + '-' + file.originalname)}
})
const upload=multer({storage:storage})router.post('/upload',upload.single('image'),imageHandler.upload)module.exports=router

router_handler:

const db = require("../db/index");const imageHandler = {upload: (req, res) => {const sql = 'update proj set image=? where code=? and user=?;'const imageUrl = `http://127.0.0.1:3000/images/${req.file.filename}`// console.log(avatarUrl);// 执行sql语句db.query(sql, [imageUrl, req.body.code,req.body.user], (err, results) => {// sql语句执行错误if(err) return res.cc(err)// sql语句执行成功,但影响的条数部位1属于执行失败if(results.affectedRows !== 1) return res.cc('上传图片失败!')// 更换头像成功res.json({msg:'上传成功',imageUrl:imageUrl})})},
};module.exports = imageHandler;

一定要加上这句

app.use(express.static('public'))

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 51单片机的最小系统详解
  • 全球点赞最高的人颜廷利:真正的人生目标是什么
  • win11安装MySQL
  • sqlites数据库读取,仅适用于数据少的数据库查询
  • Facebook:打开数字社交的魔盒
  • ARM day5
  • 6-5 统计二叉树结点个数
  • 【第八章】多线程——Thread类
  • 微信小程序如何跳转微信公众号
  • 苹果手机备忘录共享到微信,为何显示不支持的类型
  • 冷冻式压缩空气干燥机常见几种系统原理图
  • Vue从入门到实战Day07
  • HTML蓝色爱心
  • C++第二十弹---深入理解STL中vector的使用
  • MySQL--联合索引应用细节应用规范
  • Docker入门(二) - Dockerfile
  • iOS | NSProxy
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java-详解HashMap
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 大型网站性能监测、分析与优化常见问题QA
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​数据链路层——流量控制可靠传输机制 ​
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # C++之functional库用法整理
  • #if和#ifdef区别
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (1)(1.13) SiK无线电高级配置(五)
  • (160)时序收敛--->(10)时序收敛十
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Git) gitignore基础使用
  • (WSI分类)WSI分类文献小综述 2024
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (新)网络工程师考点串讲与真题详解
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)大型网站架构演变和知识体系
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • *算法训练(leetcode)第四十天 | 647. 回文子串、516. 最长回文子序列
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net dataexcel 脚本公式 函数源码
  • .Net 知识杂记
  • .NET框架
  • .NET序列化 serializable,反序列化
  • .stream().map与.stream().flatMap的使用
  • //usr/lib/libgdal.so.20:对‘sqlite3_column_table_name’未定义的引用
  • /etc/fstab 只读无法修改的解决办法
  • @JsonFormat 和 @DateTimeFormat 的区别