element上传图片组件使用方法|图片回显|格式转换base64
upload上传组件的使用方法
上传图片后自动上传(也可以手动上传),图片上传成功后由后端返回特定图片地址,在表单提交后将表单数据同图片地址一并返回即可完成图片上传功能。
组件HTML
<!-- 上传图片 -->
<div style="margin: 4px 0">图片上传(仅支持jpg、png格式)</div>
<el-upload
class="upload"
:class="{ hide: hideUpload }"
action="#"
list-type="picture-card"
:auto-upload="true"
:limit="3"
:http-request="uploadFiles"
:before-upload="beforeAvatarUpload"
:on-change="onChange"
:on-success="onSuccess"
:on-remove="handleRemove"
:file-list="fileList"
accept="image/jpeg,image/gif,image/png,image/jpg"
>
<i slot="default" class="el-icon-plus"></i>
</el-upload>
需要声明部分变量
方法
1.将图片转换为base64的方法
//文件转base64
getBase64(file) {
return new Promise((resolve, reject) => {
let reader = new FileReader()
let fileResult = ''
reader.readAsDataURL(file) //开始转
reader.onload = function () {
fileResult = reader.result
} //转 失败
reader.onerror = function (error) {
reject(error)
} //转 结束 咱就 resolve 出去
reader.onloadend = function () {
resolve(fileResult)
}
})
},
2.数组根据内容删除对应元素
// 对应内容的索引
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
};
// 删除对应索引的内容
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
3.编辑图片并回显
已经上传过的图片如果需要进行编辑的话需要在进行上传之前先将已经上传过的图片已规定的格式存入图片列表中
放在切换至引用
this.picArr = [];
// 编辑上传过的图片
if (row.picList.length > 0) {
for (let i = 0; i < row.picList.length; i++) {
let param = { name: "", url: "", data: "" };
param.name = row.picList[i].id;
param.url = "/xxx/xxx/xxx?picUrl=" + row.picList[i].picurl;
this.picArr.push(param);
}
}
通过接受进来的数据将已经上传过的图片进行格式化,其中需要包含name、url 两种属性。HTML中需要写入:file-list="picArr"其中picArr就是自动添加进去的图片(格式与手动上传的图片不统一,提交的时候需要再次处理)
4.将文件以formdata的形式进行发送
//发送请求
let params = new FormData()
params.append('file', file.file)
params.append('size', file.file.size)
api.submit(params)
.then((res) => {
this.$message.success('上传图片成功')
this.feedbackImg.push(res.data)
})
.catch((err) => {
console.error(err)
})
钩子
1.更改默认请求 http-request
需要将默认请求开启 :auto-upload="true"
// 自定义上传图片
uploadFiles(data) {
console.log(data)
this.formData.fileName = data.file.name //文件名
this.formData.fileType = 'updateNoticeFile'
this.getBase64(data.file).then((resBase64) => {
// 操作。。。
this.fileList.push({
name: this.formData.fileName,
url: resBase64,
})
})
},
2.图片上传前 before-upload
// 上传文件前
uploadBefore(file) {
const isJPG =
file.type === "image/png" ||
file.type === "image/jpg" ||
file.type === "image/jpeg";
const isLt = file.size / 1024 / 1024 < 2;
if (!isJPG) {
this.$message.error("只能上传.jpg/.png/.jpeg格式图片!");
return false;
}
if (!isLt) {
this.$message.error("上传图片大小不能大于等于2MB!");
return false;
}
return true;
},
3.发生改变之后 on-change
//发生改变后
onChange(file, fileList) {
this.hideUpload = this.imgList.length >= this.limitCount;
//操作...
},
4.文件上传成功后 on-success
//上传成功后
onSuccess(response, file, fileList, xhr) {
this.picList = fileList;
},
利用第三个参数fileList保存当前文件列表的状态
5.删除成功后 on-remove
其中imgList为个人自定义添加的图片列表,实际可用fileList替代
// 删除成功后
onRemove(file, fileList) {
// file = JSON.stringify(file)
// 对应内容的索引
Array.prototype.indexOf = function(val) {
for (var i = 0; i < this.length; i++) {
if (this[i] == val) return i;
}
return -1;
};
// 删除对应索引的
Array.prototype.remove = function(val) {
var index = this.indexOf(val);
if (index > -1) {
this.splice(index, 1);
}
};
if (file && file.status === "success") {
// 删除成功时候的方法
this.imgList.remove(file);
this.hideUpload = this.imgList.length >= this.limitCount;
}
this.picList = fileList;
},
利用第二个参数 fileList 保存文件列表的状体
样式
隐藏添加按钮
根据动态增加hide类使新增图片按钮动态隐藏
对upload上传文件标签添加动态的class当图片上传至指定个数后将添加按钮隐藏
:class="{ hide: hideUpload }"
// 隐藏新增的按钮
/deep/ .hide .el-upload--picture-card {
display: none;
}
element上传图片组件使用方法|图片回显|格式转换base64的更多相关文章
- java图片上传及图片回显1
目的:选择图片,进行图片回显之后将图片保存到服务器上(PS:没有使用任何插件,样式很丑) 实现方式: js+servlet+jsp的方式来实现 事先准备: 文件上传处理在浏览器中是以流的形式提交到服务 ...
- vue element upload图片 回显问题
beforeUpload (file) { var _this = this; var reader = new FileReader(); reader.readAsDataURL(file); ...
- jfinal 后台文件上传(结合上一篇(h5 图片回显))
前端用了jquery.form.js插件异步提交表单 $("#imgForm").ajaxSubmit();//户主头像 /** * * @description 上传户主头像 * ...
- h5 图片回显
<form method="post" id="imgForm" action ="/hi/holdHead" enctype=&qu ...
- aliyun-oss 通过redis来实现跨域上传图片到阿里 OSS并回显进度条
public class PutObjectProgressListener implements ProgressListener { private long bytesWritte ...
- 使用canvas给图片添加水印, canvas转换base64,,canvas,图片,base64等转换成二进制文档流的方法,并将合成的图片上传到服务器,
一,前端合成带水印的图片 一般来说,生成带水印的图片由后端生成,但不乏有时候需要前端来处理.当然,前端处理图片一般不建议,一方面js的处理图片的方法不全,二是有些老版本的浏览器对canvas的支持度不 ...
- [Python]-opencv-python模块(cv2)-图片读取和格式转换
python常常用opencv模块来处理图像. import cv2 as cv 读取图片:imread() 默认按照彩色三通道读取: img = cv2.imread(path) 读取灰度图: im ...
- 淘淘商城学习笔记 之 上传图片到远程服务器,图片的回显出现的bug
最近在学习淘淘商城中用到的技术,感觉受益良多,遇到一个比较奇怪的bug调了好久,遂心乐之分享于诸君 bug情况是这样的:在商城的后台上传图片之后图片回显不出来,右键查看链接,发现链接被加了localh ...
- ueditor1.4.3jsp版成功上传图片后却回显不出来与在线管理显示不出图片的解决方案
这是因为路径问题,可以在jsp/config.json这个文件去改路径 通过“imageUrlPrefix”与“imagePathFormat”这两个属性去拼凑路径. “imageUrlPrefix” ...
- 如何用input标签上传多个图片并回显
本文主要记录如何用input标签和jquery实现多图片的上传和回显,不会涉及后端的交互,大概的效果看图 我们从零来做一个这样的demo 第一步: 我们先完善一下我们的页面,默认的input-file ...
随机推荐
- 2021年9月28日,老是遇到一些非常奇葩的问题。就离谱、好好的一个web项目就莫名奇妙坏了。
起因是这样的:我前几天用idea2020编辑器,用ssm框架搭建了一个图书管理系统.只是将图书信息的增删改查实现,还有用户的注册和登录功能实现.本来想着今天将用户信息的删除和修改完善以下,本来是很简单 ...
- Windows10 + Eclipse C/C++开发环境配置极简教程
下载安装Eclipse 访问下载Eclipse IDE for C/C++ Developers https://www.eclipse.org/downloads/packages/ 将下载下来的压 ...
- 深入理解独占锁ReentrantLock类锁
ReentrantLock介绍 [1]ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁,可以保证线程 ...
- 知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2021):MPG:一种有效的自我监督框架,用于学习药物分子的全局表示以进行药物发现
6.(2021.9.14)Briefings-MPG:一种有效的自我监督框架,用于学习药物分子的全局表示以进行药物发现 论文标题:An effective self-supervised framew ...
- 4.Future对象
asyncio.Future对象 Future是Task类的基类 Task对象内部await结果的处理是基于Future对象来的 async def main(): # 获取当前事件循环 loop = ...
- 文本挖掘与NLP笔记——代码向:分词
分词:jieba.cut words = jieba.cut("我来到北京大学",cut_all=True) print('全模式:'+'/'.join([w for w in w ...
- 二、docker安装
一.docker安装 Docker 是管理容器的工具, Docker 不等于 容器. 1.1.docker yum源设置 #step 1 download docker-ce.repo file [r ...
- day03-CSS
CSS 1.css介绍 css指的是层叠样式表(cascading style sheets) 官方文档:https://www.w3school.com.cn/css/index.asp 为什么需要 ...
- Go语言核心36讲14
在前几期文章中,我们分了几次,把Go语言自身提供的,所有集合类的数据类型都讲了一遍,额外还讲了标准库的container包中的几个类型. 在几乎所有主流的编程语言中,集合类的数据类型都是最常用和最重要 ...
- SpringBoot2.5.1+Mybatis-Plus3.4.3:(Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required)
项目引发这个问题: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required <parent> <group ...