位置: IT常识 - 正文

vue+el-upload 上传图片和视频小总结(vue上传文件和后端upload)

编辑:rootadmin
vue+el-upload 上传图片和视频小总结

推荐整理分享vue+el-upload 上传图片和视频小总结(vue上传文件和后端upload),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:elementui upload上传,vue上传文件和后端upload,vue elementui 上传文件,vue element上传文件,vue上传文件和后端upload,elementui upload上传,elementui upload上传,vue element上传文件,内容如对您有帮助,希望把文章链接给更多的朋友!

一、图片下标,判断,base64,获取img标签等问题

上传图片时用到的accept只会在用户点击上传时添加一个自定义文件类型,如添加了accept=".jpg,.png,",虽然会呈现出符合条件的文件,但用户仍可以通过点击所有文件类型来上传其他类型的文件,此时设置before-upload函数,

参考el-upload上传组件accept属性限制文件类型(案例详解)_辰兮要努力的博客-CSDN博客_el-upload accept 结果只有accept在生效,ElementUI el-upload上传图片限制, before-upload 不生效问题_老电影故事的博客-CSDN博客_beforeupload参考该文章发现自动把自动上传关闭导致这个问题,就只能绑定在on-change里;另外还有:on-exceed 加 limit执行上传限制长度的函数执行。

<el-form-item label="商品轮播图设置" label-width="160px"> <p>商品轮播图</p> <p class="tips"> 仅支持上传图片,最少上传一张 最多可上传十张, 已上传 <span>{{ canonicalImage.length }}</span> / 10 </p> <div class="form_canonicalImage"> <el-upload action="#" list-type="picture-card" :auto-upload="false" :limit="10" :multiple="true" :file-list="canonicalImage" :on-change="uploadChange" :on-remove="handleRemove" :on-exceed="handleExceed" :on-preview="handlePreview" :before-remove="beforeRemove" :before-upload="beforeImageUpload" ref="mYupload" accept=".jpg,.png," > <i slot="default" class="el-icon-plus"></i> </el-upload> <el-dialog :visible.sync="dialogVisible"> <img width="100%" :src="dialogImageUrl" alt="" /> </el-dialog> </div> </el-form-item>vue+el-upload 上传图片和视频小总结(vue上传文件和后端upload)

methods中

//删除之前的钩子 beforeRemove(file, fileList) { return this.$confirm('删除该图片, 是否继续?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }) }, // 删除轮播图 handleRemove(file, fileList) { this.canonicalImage = JSON.parse(JSON.stringify(fileList)); }, //触发上传限制 handleExceed() { this.$message.warning("上传超出限制!"); }, //预览 handlePreview(file) { this.dialogImageUrl = file.url; this.dialogVisible = true; }, // 添加轮播图 uploadChange(file, fileList) { //截取出文件末尾的类型 let fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1); const whiteList = ["jpg", "png"]; const isLt2M = file.size / 1024 / 1024 < 4; if (whiteList.indexOf(fileSuffix) === -1) { this.$message.error("上传文件只能是jpg/png格式"); fileList.pop(); return false; } else if (!isLt2M) { this.$message.error("上传文件大小不能超过 4MB"); fileList.pop(); return false; }else{ this.uploadImage_loading = true; this.getBase64(file.raw).then((res) => { productcopyAPI .savefile({ imagesBase64: res, filetype: "image", fileName: file.name, keyName: "keyName", ticket: this.ticket, }) .then(({ data }) => { fileList.forEach((item) => { item.uid == file.uid && (item.url = data.data[0].url); }); this.canonicalImage = JSON.parse(JSON.stringify(fileList)); }) .catch((error) => { this.uploadImage_loading = false; this.$message.error(error); }); }); } }, // 图片转base64 getBase64(file) { return new Promise(function (resolve, reject) { let reader = new FileReader(); let imgResult = ""; reader.readAsDataURL(file); reader.onload = function () { imgResult = reader.result; }; reader.onerror = function (error) { reject(error); }; reader.onloadend = function () { resolve(imgResult); }; }); },

以及网络图片转base64格式的参考:vue网络图片url转Base64「建议收藏」 - 全栈程序员必看

//初始化时调用getimage() { this.$refs.mYupload.clearFiles(); this.uploadImage_loading = true; let data = []; this.canonicalImage.forEach((item, i) => { if (item.url.includes("baidu")) { data.push({ url: item.url, index: i }); }else{ data = [] } }); let num = 0; if(data[num]){ this.imageUrlToBase64(data, num); } }, //网络图片url转换为base64 imageUrlToBase64(data_, num) { //一定要置空!!!! this.base64Datas = []; let image = new Image(); //解决跨域问题 image.setAttribute("crossOrigin", "anonymous"); let imageUrl = data_[num].url; image.src = imageUrl; let that = this; //image.onload为异步加载 image.onload = () => { var canvas = document.createElement("canvas"); canvas.width = image.width; canvas.height = image.height; var context = canvas.getContext("2d"); context.drawImage(image, 0, 0, image.width, image.height); var quality = 0.8; //这里的dataurl就是base64类型 var dataURL = canvas.toDataURL("image/jpeg", quality); //使用toDataUrl将图片转换成jpeg的格式,不要把图片压缩成png,因为压缩成png后base64的字符串可能比不转换前的长! //数组存放图片base64 this.base64Datas = dataURL; productcopyAPI .savefile({ imagesBase64: this.base64Datas, filetype: "image", fileName: "file.name", keyName: "keyName", ticket: this.ticket, }) .then(({ data }) => { data_[num].url = data.data[0].url; if(num <data_.length-1){ num++ this.imageUrlToBase64(data_, num); }else{ data_.forEach((item,i)=> { this.canonicalImage[item.index].url = item.url; }); } this.uploadImage_loading = false; }) .catch((error) => { this.uploadImage_loading = false; this.$message.error(error); }); }; },

 转换格式的时候,一定要将中间的变量置空!另外为防止根据默认下标有的是网络图片有的不是,导致删除错误,还需要在对象中将该图片现在图片列表中的下标当做添加index属性以当做key值

破解循环中的异步操作,不能直接用for循环,在我看来有效的办法方法体内的num++,再回调此函数

以及在商品详情中仍需要借此转换成base64的格式,但需要先用正则表达式将所有img标签里的src获取到,其他的基本大同小异了。

//正则匹配详情里所有img标签 var regex0 = new RegExp(/(?<=(img src="))[^"]*?(?=")/gims); //eslint-disable-line this.detailimgtag = this.outdetail.match(regex0); let data= [] let num = 0 this.detailimgtag.forEach((item,i)=>{ if (item.includes("baidu")) { data.push({url:item,index:i}) } })

二、formdata的方式上传视频,原生axios上传,进度条等问题

视频(也是文件)用formdata的方式上传报错,参考:vue上传文件formData入参为空,接口请求500_静静心中的梦_66的博客-CSDN博客用到了原生axios上传,另外在接口中上传和返回时间过长,需要添加一个进度条展示,参考:element ui 图片自定义上传进度条消失问题_我是顾昀峰的博客-CSDN博客_vue和elementui视频上传成功后进度条消失但展示中只会有上传进度的展示,返回以及添加至页面还需要等待很久,进度条以及到100%了。

// 视频上传函数 uploadVideo(file,fileList) { //截取出文件末尾的类型 let fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1); const blackList = ["mp4"]; const isLt2M = file.size / 1024 / 1024 < 10; if (blackList.indexOf(fileSuffix) === -1) { this.$message.error("上传文件只能是mp4格式"); // this.canonicalVideo = fileList.slice(0,1) return false; }else if (!isLt2M) { this.$message.error("上传文件大小不能超过 10MB"); // this.canonicalVideo = fileList.slice(0,1) return false; }else { this.isShowUploadVideo = false; this.videoFlag = true; var formdata = new FormData(); formdata.append("file", file.raw); formdata.append("filetype", "video"); formdata.append("ticket", this.ticket); formdata.append("keyname", "keyName"); formdata.append("filenames", file.name); this.$axios.post('https://aicaigoufuwuapi.yiwangtui.com/api/upload/UploadFile',formdata,{ onUploadProgress: progressEvent => { if(progressEvent.lengthComputable) var val = parseInt(progressEvent.loaded / progressEvent.total * 100 ).toFixed(0) this.videoUploadPercent = Math.floor(val)-1; } } ) .then(res=>{ this.canonicalVideo=[{ src:res.data.data.data[0].url, video_id:'' }]; this.videoFlag = false; this.videoUploadPercent = 100; }) .catch((error)=>{ this.$message.error(error+',请重新上传!'); this.videoFlag = false; this.videoUploadPercent = 0; }) } },
本文链接地址:https://www.jiuchutong.com/zhishi/287302.html 转载请保留说明!

上一篇:vue3 antd项目实战——table表格的自定义筛选【纯前端filters过滤、自定义筛选table表格数据】(vue antdesign)

下一篇:vue2 ElementUI 表单标签、表格表头添加问号图标提示(element-ui表格)

  • 魅族17有没有光学防抖(魅族17没有光学防抖吗)

    魅族17有没有光学防抖(魅族17没有光学防抖吗)

  • macbookshift键在哪

    macbookshift键在哪

  • 台电和台积电是一个吗(台电和台积电是什么关系)

    台电和台积电是一个吗(台电和台积电是什么关系)

  • 华为截屏怎么设置敲击(华为截屏怎么设置三指)

    华为截屏怎么设置敲击(华为截屏怎么设置三指)

  • 顺风车没人接单怎么办(为什么滴滴顺风车没人接单)

    顺风车没人接单怎么办(为什么滴滴顺风车没人接单)

  • 华为nova7支持多屏协同吗(华为nova7支持多大内存卡)

    华为nova7支持多屏协同吗(华为nova7支持多大内存卡)

  • cdr手机用什么软件打开(cdr文件用什么手机软件打开)

    cdr手机用什么软件打开(cdr文件用什么手机软件打开)

  • iphonexsmax发热严重,如何减少发热(iphonexsmax发热严重卡顿)

    iphonexsmax发热严重,如何减少发热(iphonexsmax发热严重卡顿)

  • 一加安卓10更新了什么(一加系统更新10.0.8怎么样)

    一加安卓10更新了什么(一加系统更新10.0.8怎么样)

  • 在拼多多买东西付了钱没有订单怎么办(在拼多多买东西好友能看见吗)

    在拼多多买东西付了钱没有订单怎么办(在拼多多买东西好友能看见吗)

  • 手机清理内存里的其他文件是什么(手机清理内存里的其他文件是什么能不能删除)

    手机清理内存里的其他文件是什么(手机清理内存里的其他文件是什么能不能删除)

  • 手机怎么清理垃圾(手机怎么清垃圾)

    手机怎么清理垃圾(手机怎么清垃圾)

  • qq如何群发(qq如何群发给所有人)

    qq如何群发(qq如何群发给所有人)

  • 苹果11听筒声音小(苹果11听筒声音小必须按免提)

    苹果11听筒声音小(苹果11听筒声音小必须按免提)

  • 华为怎么调锁屏时间(华为怎么调锁屏时间颜色)

    华为怎么调锁屏时间(华为怎么调锁屏时间颜色)

  • 步数宝邀请好友加成最高多少(步数宝怎么用)

    步数宝邀请好友加成最高多少(步数宝怎么用)

  • 苹果11pro什么时候出售(苹果11pro什么时候出的)

    苹果11pro什么时候出售(苹果11pro什么时候出的)

  • 应用宝禁止安装如何解除(怎样取消应用宝禁止安装)

    应用宝禁止安装如何解除(怎样取消应用宝禁止安装)

  • 缤智如何删除蓝牙设备(缤智如何删除蓝牙设备图解)

    缤智如何删除蓝牙设备(缤智如何删除蓝牙设备图解)

  • p3024小时怎么设置(p30pro如何设置24小时)

    p3024小时怎么设置(p30pro如何设置24小时)

  • win10多大硬盘空间(win10多少硬盘)

    win10多大硬盘空间(win10多少硬盘)

  • 什么是BIOS 怎么进入bios,bios设置图解教程(BIOS和CMOS的区别)(bios是什么请简要介绍一下)

    什么是BIOS 怎么进入bios,bios设置图解教程(BIOS和CMOS的区别)(bios是什么请简要介绍一下)

  • 部分被雪覆盖的Val Cervara山坡上的老山毛榉林,意大利蒙帕赛诺 (© Bruno D'Amicis/Minden Pictures)(被雪覆盖的山峰)

    部分被雪覆盖的Val Cervara山坡上的老山毛榉林,意大利蒙帕赛诺 (© Bruno D'Amicis/Minden Pictures)(被雪覆盖的山峰)

  • 雷尼尔山上空的银河星系,美国华盛顿州 (© Brad Goldpaint/Cavan)(雷尼尔国家公园攻略)

    雷尼尔山上空的银河星系,美国华盛顿州 (© Brad Goldpaint/Cavan)(雷尼尔国家公园攻略)

  • 劳务派遣公司差额征税的账务处理
  • 小规模纳税人个税是月报还是季报
  • 建筑工程怎么确定施工工程进度
  • 工商公示纳税总额包含个税吗
  • 怎么开具红票
  • 长期待摊费用可以转入费用或者成本吗
  • 上月暂估收入本月开票增值税实操
  • 年终红包怎么入账
  • 市政配套费交给哪个部门
  • 出差补贴费
  • 专票作废流程是什么意思
  • 应纳税所得额应纳税额公式
  • 公积金是交当月还是上月
  • 月末在产品直接人工成本怎么算
  • 资本公积转增实收资本所有者权益会变吗
  • 贴息债券计算公式
  • 苹果系统如何访问相册
  • windows刷新桌面
  • 新政府会计制度科目表
  • 公司借法人的钱超过一年
  • 电脑每次开机都要选择系统怎么办
  • 固定资产公允价值变动会计处理
  • win10蓝牙驱动怎么安装程序
  • PHP:mcrypt_enc_is_block_algorithm_mode()的用法_Mcrypt函数
  • 财政返还土地奖金的规定
  • 进项发票认证后怎么做账
  • 去噪扩散概率模型
  • php的json_encode
  • 商业汇票的承兑银行必须具备下列条件
  • 大脊山,英格兰峰区国家公园 (© John Finney Photography/Moment/Getty Images)
  • 天猫提现到对公账户怎么做账
  • 人体姿态识别国内外研究现状
  • net命令详解步骤
  • 政府奖励怎么做会计分录
  • 固定资产多少钱以上才要计提折旧
  • 零申报企业所得税怎么申报
  • 普通发票作废要做账吗
  • 员工业余自学
  • 帝国cms适合建什么站
  • phpcms v9网页禁止复制
  • 金税盘怎么看税收编码版本号
  • 股权投资都有哪些
  • 营业外收入汇算清缴时也得计入收入
  • 多计提的增值税怎么冲减
  • 发票报销哪些要素不能少
  • 保税仓库税收政策
  • 业务招待费的所得税扣除
  • 技术服务费怎么收合理
  • 缴纳增值税的会计处理方法
  • 暂估金额与发票金额的区别
  • 搬迁赔偿款
  • 企业清算未收到发票
  • 员工拿发票报销怎么做账
  • 固定资产折旧四种方法的优缺点
  • 明细账模版
  • win7 bug
  • windowsserver2003ftp服务器怎么搭建
  • 如何更改win7
  • windows media player在播放文件时遇到问题怎么解决
  • ubuntu环境搭建
  • win10预览版和正式版
  • win10系统怎么设置屏幕
  • 场景切换方式
  • javascript的三种主要数据类型
  • js必须掌握的
  • unity游戏之羊刀与Pendragon复盘:DotA做对了什么
  • javascript HTML5文件上传FileReader API
  • python 数独破解器
  • 基于node.js的跳蚤市场网站主要内容
  • php删除代码
  • jquery给td设置内容
  • node.js app
  • js判断用户输入密码
  • js mvvm 原理
  • 黑洞数6174视频
  • 地方电子税务局是干嘛的
  • 餐饮业如何缴纳增值税
  • 四川省国家电子税务局网上申报
  • 残疾人就业保障金怎么申报
  • 怎么申请浙江长沙健康码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设