Elemnet-ui实现自定义上传图片
1.该组件是基于Element-ui与Vue实现的,主要运用到了Element-ui的Upload组件的几个钩子函数,其中按照element ui官网的说法,http-request 覆盖原默认的上传行为,可以自定义上传的实现。可进行删除,可预览
个人代码实现如下:html代码部分
<div>
<el-upload
list-type="picture-card"
:limit="1"
action="#"
:on-preview="handlePictureCardPreview"
:file-list="fileList"
:on-remove="handleRemove"
:on-change="handleChange"
:before-upload="beforeUpload"
:http-request="upload"
:class="{ isShowAddPicture : fileListCom }" //定义上传一个图片后,后面的+号不显示
>
<i class="el-icon-plus" />
</el-upload>
<span>请选择要上传的图片</span>
<el-progress v-if="showPercent" :percentage="percent" style="width:195px" />
<el-dialog :visible.sync="showVisible" title="图片预览">
<img :src="data:imageUrl" alt="" style="width:100%">
</el-dialog>
</div>
Js代码部分:其中用到了一个腾讯云服务的对象存储功能,
<script>
import Cos from 'cos-js-sdk-v5'
// 创建cos实例
const cos = new Cos({
SecretId: 'AKIDsOhkW2JJ2VieJn34pKbcNs78uQghSxCC', // 身份ID
SecretKey: 'lGVVFiuoSothFWWFjxwf8ML3VifMnytX' // 身份密钥
}) export default {
data() {
return {
fileList: [],
imageUrl: '',
showVisible: false,
currentFileUid: null, // 记录当前上传的图片
percent: 0, // 图片上传的进度,
showPercent: false
}
},
computed: {
fileListCom() {
return this.fileList.length === 1
}
},
created() {
},
methods: {
// 文件预览
handlePictureCardPreview(file) {
console.log(file)
this.imageUrl = file.url
this.showVisible = true
},
// 文件删除
// fileList是删除后返回的数组
handleRemove(file, fileList) {
// console.log(file)
// console.log(fileList)
// this.fileList = this.fileList.filter(item => item.uid !== file.uid) // 将删除后的文件排除在外
this.fileList = fileList
},
// 文件上传
handleChange(file, fileList) {
// if (this.fileList.filter(item => item.uid === file.uid)) {`
// }
console.log(fileList.length)
// ************把添加的图片显示
this.fileList = fileList.map(item => item)
// this.fileList = [...fileList]
},
// 文件上传前检查文件类型
beforeUpload(file) {
// console.log(file)
// 先检查文件类型
const imgType = ['image/webp', 'image/png', 'image/jpeg', 'image/jpg']
if (!imgType.some(item => item === file.type)) {
// if (!imgType.includes(file.type)) {
// 如果不存在
this.$message.error('请检查上传的图片格式是否为webp/png/jpeg/jpg格式')
return false// 上传停止
}
// 其次检查文件大小,不能超过5M
const maxSize = 5 * 1024 * 1024
if (file.size > maxSize) {
this.$message.error('上传的文件大小不能大于5M!')
return false
}
this.currentFileUid = file.uid
this.showPercent = true
// console.log(this.currentFileUid)
return true
},
// 上传图片动作
upload(params) {
// console.log(params)
if (params.file) {
cos.putObject({
Bucket: 'wuniwei66-1306658544', // 配置自己腾讯云的存储桶
Region: 'ap-guangzhou', // 地域
Key: params.file.name, // 文件名
Body: params.file, // 要上传的文件对象
StorageClass: 'STANDARD', // 上传的模式类型 直接默认 标准模式即可
// 上传到腾讯云 =》 哪个存储桶 哪个地域的存储桶 文件 格式 名称 回调
onProgress: (params) => {
console.log(params)
this.percent = params.percent * 100
}
}, (error, data) => {
console.log(error || data)
if (!error && data.statusCode === 200) {
// 如果为true,说明文件上传成功 fileList的数据的url变成现在上传成功的地址
// 目前是一种图片,但是请注意 fileList是一个数组,需要知道当前上传的哪一张图片
this.fileList = this.fileList.map(item => {
console.log(item)
if (item.uid === this.currentFileUid) {
// 将成功的地址赋值给原来的url属性
console.log(data.Location)
return { url: 'http://' + data.Location, upload: true }
}
return item
})
// 将上传成功的地址 回写到fileList中 fileList的变化 =》upload组件就会根据fileList变化去渲染获取图片地址
setTimeout(() => {
// 1.关闭进度条
// 2.进度条重置为0
this.showPercent = false
this.percent = 0
}, 1000)
}
})
}
}
}
}
</script>
具体实现效果如下:
总结:Vue中为了减少自己服务器的内存,可以通过第三方云服务器来存储地址,把图片的地址存到自己的服务器上,这个案例是用element-ui组件库中的upload组件上传到了我自己的腾讯云里面,
第一步先下载包cos-js-sdk-v5
第二步的话要创建Cos实例
const COS = require('cos-js-sdk-v5')
// 填写自己腾讯云cos中的key和id (密钥)
const cos = new COS({
SecretId: 'AKIDWLuDHAsKxQecJlvmQIJsAB0a9RrwqbeR', // 身份识别ID
SecretKey: 'xxx' // 身份秘钥
})
具体实现步骤:可查阅文档 :https://cloud.tencent.com/document/product/436/38484
只是针对于elment-ui组件库有效,如果使用其他的组件库,需要做更改
Elemnet-ui实现自定义上传图片的更多相关文章
- css3自定义上传图片输入框的方法
css3自定义上传图片输入框的方法 代码如下<pre> <form class="form1"> <img src="/kelatoupia ...
- HTML5 UI框架Kendo UI Web自定义组件(一)
Kendo UI Web包含数百个创建HTML5 web app的必备元素,包括UI组件.数据源.验证.一个MVVM框架.主题.模板等.在Kendo UI Web中如何创建自定义组件呢,在下面的文章中 ...
- IOS7学习之路一(新UI之自定义UITableViewCell)
ios7 新升级之后界面有了很大的变化,xcode模拟器去掉了手机边框和home键,如果想回到主页面,可以按住shift+comment+r键.废话少说先展示一下新UI下UItableView设置为G ...
- Android开发学习之路--UI之自定义布局和控件
新的一年已经开始了,今天已经是初二了,两天没有学习了,还是要来继续学习下.一般手机的title都是actionbar,就像iphone一样可以后退,可以编辑.这里自定义布局就来实现下这个功能,首先准备 ...
- vue + element ui 表格自定义表头,提供线上demo
前言:工作中用到 vue+element ui 的前端框架,需要使用自定义表头,需要使用 re.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9710826.h ...
- Android UI组件----自定义ListView实现动态刷新
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- iOS开发UI篇—自定义layer
一.第一种方式 1.简单说明 以前想要在view中画东西,需要自定义view,创建一个类与之关联,让这个类继承自UIView,然后重写它的DrawRect:方法,然后在该方法中画图. 绘制图形的步骤: ...
- 【Android UI】自定义带按钮的标题栏
自定义标题栏在很多的android app中很常见,可以说是一种很有用的UI设计方法.自 己也本着学习的态度,经过一番各种坑,终于实现了,现总结如下: 一:大致流程 1. 对指定的andro ...
- UI布局 自定义布局
今天学习了UI布局当中的自定义的布局的部分,在开始的时候先动手写了一个跟随手指移动的小兔子的实例,初步的了解了布局管理器的概念之后开始正式进行布局管理器,其中包括相对布局,线性布局,帧布局,表格布局, ...
- iOS开发——UI基础-自定义构造方法,layoutSubviews,Xib文件,利用Xib自定义View
一.自定义构造方法 有时候需要快速创建对象,可以自定义构造方法 + (instancetype)shopView { return [[self alloc] init]; } - (instance ...
随机推荐
- Springboot 在项目启动时将数据缓存到全局变量
有写字典数据不会频繁更新,但是会频繁查询,想要减少数据库链接次数,把内容缓存到项目的全局变量中,提高方法查询速度 import javax.annotation.PostConstruct; impo ...
- NCS开发学习笔记-基础篇-第 1 课 – nRF Connect SDK 简介
第 1 课 – nRF Connect SDK 简介 目标 了解 nRF Connect SDK 的结构和内容 在内部,nRF Connect SDK 代码分为四个主要存储库: nrf – 应用程序. ...
- deepseek: php测试代码执行用时
在 PHP 中,你可以使用 microtime() 函数来测量代码的执行时间.microtime() 函数返回当前 Unix 时间戳的微秒数.你可以在代码的开始和结束处分别调用 microtime() ...
- git 命令手册【不定时更新】
本地分支 --> 远程服务器 git add xxx git commit -m "xxx" git push origin xxx 远程服务器 --> 本地分支 gi ...
- 【练习回顾】dfs迷宫+路径打印
很直接的dfs.递归+栈--不知道以后会不会生疏 进入一次dfs,相当于走一步,入栈:结束一次dfs,相当于这一步考虑结束,出栈 笑死,y1竟然是一个函数 突然发现写的有点槽,可以把dfs形式化为&q ...
- selinux中Enforcing, Permissive 和Disable这三种模式的区别
1.如果要马上拒绝运行SELinux:[root@localhost ~]# setenforce 0[root@localhost ~]# getenforcePermissive这条命令会把SEL ...
- ORA-01779: 无法修改与非键值保存表对应的列”中涉及的概念和解决方法
什么是键值保存表(Key-Preserved Table)? 在理解什么是键值保存表之前,首先要知道 可更新的联接视图 这个概念,键值保存表只是保存了允许更新的字段信息的一张表.为什么会出现这么一张表 ...
- Ubuntu安装GPU驱动+CUDA+cuDNN的安装方法
一台有GPU的虚拟机如果没有安装CUDA的驱动,是需要我们手动去进行安装的,介绍Ubuntu操作系统的安装教程. 1. 下载安装文件 NVIDIA CUDA Toolkit Archive 点击上面链 ...
- [每日算法 - 阿里机试] leetcode739. 每日温度
入口 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer.https://le ...
- 常见的 AI 模型格式
来源:博客链接 过去两年,开源 AI 社区一直在热烈讨论新 AI 模型的开发.每天都有越来越多的模型在 Hugging Face 上发布,并被用于实际应用中.然而,开发者在使用这些模型时面临的一个挑战 ...