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 ...
随机推荐
- MySQL - [10] 时间处理函数
题记部分 (1)获取当前日期时间:select current_date; (2)获取当前时间戳:select current_timestamp; (3)返回日期中的年/季度/月/日/时/分/秒 s ...
- 解决win11输入法自定义短语有多个当前日期只有最后一个生效
由于win11自定义短语保存机制问题导致只有最后一个当前日期短语生效** 1.首先找到自定义短语存储文件的具体路径:%AppData%\Microsoft\InputMethod\Chs\ 拼音输入法 ...
- 洛谷P3755 [CQOI2017] 老C的任务 题解
前言:这个分块和刚被撤下的不同,因为这个分块时间复杂度正确,能通过所有 hack. 题目传送门. 有没有什么可以不用离线都能解决问题的简单算法?答案是分块!! 60pts 首先遇到这个题目,先写一个比 ...
- deepseek: php测试代码执行用时
在 PHP 中,你可以使用 microtime() 函数来测量代码的执行时间.microtime() 函数返回当前 Unix 时间戳的微秒数.你可以在代码的开始和结束处分别调用 microtime() ...
- Anoii之UDP与多路复用
代码连接:https://github.com/Afeather2017/anoii/blob/master/src/udp_peer.cc 以往写了TCP的多路复用,发现它还挺难写对的.现在写UDP ...
- Web前端入门第 17 问:前端开发编辑器及插件推荐
HELLO,这里是大熊学习前端开发的入门笔记. 本系列笔记基于 windows 系统. 虽然说 Web 前端开发用记事本也能玩,但正常的开发者绝不用记事本玩(大佬除外). 想想要用记事本扣一个淘宝.京 ...
- 初识 PHP 7 源码整体框架
目录 PHP 7 语言的执行原理 编译型语言与解释型语言 PHP 7 语言的执行原理 我们常用的高级语言有很多种,比较出名的有C\C++.Python.PHP.Go.Pascal等.而这些语言根据运行 ...
- 痞子衡嵌入式:记录为i.MXRT1060更换较大容量Flash(IS25LP064A_IS25LP128F)导致二级App异常启动问题解决全过程(上篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是为i.MXRT1060更换较大容量Flash导致二级App异常启动问题. 痞子衡最近在支持一个 RT1062 国外客户项目,客户在项目预 ...
- 基础指令:mkdir、ls、cd、pwd、touch、rm、mv、cp、echo、cat、关机与重启
目录 1. 创建目录 2. 查看目录内容 3. 进入指定目录(传送) 4. 显示当前所在位置 5. 创建文件 6. 删除文件或目录 7. 移动文件 8. 复制文件或目录 9. echo输出信息到屏幕 ...
- 推荐2款docker可视化管理面板
1.portainer portainer算是比较知名的开源docker管理工具,功能上比较齐全,不过只有英文版本,没有中文,不过这并不影响他的使用. 官方地址:https://www.portain ...