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 ...
随机推荐
- 洛谷P1191 矩形 题解
笛卡尔树的介绍 笛卡尔树,是一种二叉搜索树,它满足如下条件: 每个节点的编号满足二叉搜索树的性质. 每个节点的权值满足小根堆或大根堆的性质. 大概是这个样子: 笛卡尔树的建树 请看这里. 笛卡尔树的用 ...
- pytest 框架使用规则
使用pytest 注意 有时候常常会调用时文件未执行,就是没注意命名规范 如何调用-命令行调用 pytest 批量运行测试用例 单个用例调试成功后,接下来我们要进行所有脚本统一执行 我要执行testc ...
- RCE_STUDY
概念 RCE(Remote code execution)远程代码执行漏洞,RCE又分命令执行和代码执行. RCE-远程代码执行:远程执行PHP代码 RCE-远程命令执行:远程执行Linux或者Win ...
- Qt Oracle往数据库里插入或者更新图片
文章目录 Qt Oracle往数据库里插入或者更新图片 前言 读取本地图片文件 QPixmap 转 QByteArray 组成SQL,并执行 Qt Oracle往数据库里插入或者更新图片 前言 最近遇 ...
- docker build 镜像时,无法访问网络
前言 在使用 docker build 命令构建 Docker 镜像时遇到无法联网的情况,可能会有多种情况的发生. 检查主机网络设置 检查你的主机是否配置了代理服务器或防火墙,这可能会阻止 Docke ...
- mac、windows 配置python国内镜像源
前言 我们在使用python pip安装第三方库时,经常会发生超时报错,这是可以指定临近的镜像源快速更新. mac中 在用户目录下建立一个".pip"目录,到目录里新建一个文件&q ...
- post数据到第三方,中文乱码
1.项目中发现 测试环境 推送正文,数据正常 2.生产到腾讯云之后,中文推送过去乱码,但是post 接口的 时候,指定了 编码格式. 3.后查看日志,发现日志中记录的中文就是乱码 4.排查cs代码文件 ...
- .net WorkFlow 流程传阅
WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...
- php/symfony执行生成密钥命令时报错Undefined constant 'OPENSSL_KEYTYPE_RSA'解决办法
php/symfony执行 lexik:jwt:generate-keypair --overwrite命令生成密钥时报错Undefined constant 'OPENSSL_KEYTYPE_RSA ...
- 在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持
我在前面随笔中介绍了在SqlSugar的开发框架中实现EAV模型(实体-属性-值)的处理,这个EAV模型实现的目的是支持弹性化的数据库设计,可以自由扩展数据库表字段和数据的查询和存储,实现的思路是在常 ...