vue 图片上传功能

摘要:
False:true“˃{alert('上传图像的错误!
 

这次做了vue页面的图片上传功能,不带裁剪功能的!

首先是html代码,在input框上添加change事件,如下:

  1.  
    <ul class="clearfix">
  2.  
    <li v-if="imgs.length>0" v-for='(item ,index ) in imgs'>
  3.  
    <img :src="item">
  4.  
    </li>
  5.  
    <li style="position:relative" v-if="imgs.length>=6 ? false : true">
  6.  
    <img src="../../assets/img/addimg.png"><input class="upload" @change='add_img' type="file">
  7.  
    </li>
  8.  
    </ul>
我这里做了图片数量的限制,最多6张。

然后是data数据,如下:

  1.  
    data () {
  2.  
    return {
  3.  
    imgs: [],
  4.  
    imgData: {
  5.  
    accept: 'image/gif, image/jpeg, image/png, image/jpg',
  6.  
    }
  7.  
    }
  8.  
    }
imgs数组是放图片路径的,页面显示图片就是循环这个数组,imgData是判断图片类型的。

接下来是最重要的methods里面的方法,具体如下:

[html] view plain copy
 
  1. <code class="language-html">add_img(event){    
  2.             let reader =new FileReader();  
  3.             let img1=event.target.files[0];  
  4.             let type=img1.type;//文件的类型,判断是否是图片  
  5.             let size=img1.size;//文件的大小,判断图片的大小  
  6.             if(this.imgData.accept.indexOf(type) == -1){  
  7.                 alert('请选择我们支持的图片格式!');  
  8.                 return false;  
  9.             }  
  10.             if(size>3145728){  
  11.                 alert('请选择3M以内的图片!');  
  12.                 return false;  
  13.             }  
  14.             var uri = ''  
  15.             let form = new FormData();   
  16.             form.append('file',img1,img1.name);  
  17.             this.$http.post('/file/upload',form,{  
  18.                 headers:{'Content-Type':'multipart/form-data'}  
  19.             }).then(response => {  
  20.                 console.log(response.data)  
  21.                 uri = response.data.url  
  22.                 reader.readAsDataURL(img1);  
  23.                 var that=this;  
  24.                 reader.onloadend=function(){  
  25.                     that.imgs.push(uri);  
  26.                 }  
  27.             }).catch(error => {  
  28.                 alert('上传图片出错!');  
  29.             })      
  30. },</code>  


 首先是获取你选择的图片,判断图片的类型和大小,然后以form表单的形式提交到后台,后台会返回给你这个图片的线上路径,你把后台返回的图片路径push到图片数组里面就可以了。 

一般情况下还有删除图片的方法,就是把图片数组里的那个路径删除掉,把数据提交到后台,告诉后台删除了哪张图片就可以了。

<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
body {
margin: 0;
}

html,
body {
height: 100%;
}

#box {
100%;
height: auto;
}

.img-d {
margin-top: 30px;
300px;
height: 300px;
text-align: center;
position: relative;
}

.img-d span {
display: inline-block;
100%;
height: 100%;
background-image: url("imagess/kmhvbjvb.jpg");
cursor: pointer;
background-size: 100% 100%;
background-repeat: no-repeat;
}

#up {
/* display: none; */
}

.rems {
display: inline-block;
25px;
height: 25px;
background: red;
border-radius: 50% 50%;
font-size: 17px;
position: absolute;
top: -6px;
right: -6px;
color: white;
text-align: center;
line-height: 25px;
cursor: pointer;
}
</style>
</head>

<body>
<div id="box">
<div class="img-d">
<span class="up-s"></span>
<input type="file" multiple name="files">
</div>
</div>
<script>
// span的点击事件
var addBtn = document.querySelector('.up-s');
addBtn.addEventListener('click', function () {
document.querySelector('#up').value = null;
document.querySelector('#up').click();
return false;
}, false);

// 处理input点击之后的change事件
document.getElementById("up").addEventListener("change", function (e) {
var files = this.files;
var reader = new FileReader();
reader.readAsDataURL(files[0]);
reader.onload = function (e) {
var dx = (e.total / 1024) / 1024;
if (dx >= 2) {
alert("文件大小大于2M");
return;
}
var result = this.result;//这里就是转化之后的DataURL
addBtn.style.backgroundImage = "url(" + result + ")";
}
var rem = document.createElement("i");
rem.setAttribute("class", "rems");
rem.innerHTML = "x";
document.querySelector(".img-d").appendChild(rem);
rem.addEventListener('click', function () {
this.style.display = "none";
addBtn.style.backgroundImage = "url(imagess/kmhvbjvb.jpg)";
});
})

</script>
</body>

</html>

免责声明:文章转载自《vue 图片上传功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MongoDB 权限管理 用户名和密码的操作android使用POI读写word doc文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue3.x 中获取dom元素

vue3.x的语法虽然和vue2 比没法发生什么变化,但是在写法上发生了很大的变化 在vue2中我们可以通过this$refs.['XX'] 获取dom 元素,但是在vue3.x中已经舍弃了refs,下面就是vue3中获取dom 元素 1.为节点添加一个 ref 名称2.创建 ref 响应式常量并且与 DOM 节点名称一致 ,且值为 null3.在 mou...

VUE集成keycloak和Layui集成keycloak

一:KEYCLOAK配置部分:   1,下载keycloak,官网地址:https://www.keycloak.org/downloads.html。下载第一个就行        2,下载完毕之后,打开文件,访问 bin 路径,点击 standalone.bat 打开,打开之后大概如下:             3,然后访问:http://localho...

vue-awesome-swiper 配置 (分页不显示鼠标无效渐变无效等)

代码片断 import { Swiper, EffectFade, Mousewheel, Pagination } from 'swiper' import { directive } from 'vue-awesome-swiper' import 'swiper/swiper-bundle.css' Swiper.use([EffectFade,...

富文本编辑器vue2-editor

富文本编辑器vue2-editor 在后台管理系统开发的过程中,富文本编辑器是经常会用到的一种文本编辑工具。目前主流的富文本编辑器有很多,但总有一款是符合自己需求的。在周末花费了大约半天的时间,尝试了许多富文本编辑器,大体上功能都相差无几。主要是对富文本中图片的处理,各个种类的富文本对图片的处理差异还是挺大的。此处的所说的图片处理指的是图片的大小调整、位置...

适用于 Vue 的播放器组件Vue-Video-Player。

如果h5的标签<vedio>不能满足你的需求,那就用这个组件Vue-Video-Player吧,也许可以覆盖到你的需求。 <video-player ref="videoPlayer" :playsinline="true" :options="playerOptions" >&l...

学习vue 20天,我写了点东西

往昔 最初团队里使用Angularjs进行开发,刚开始还好,到了项目后期越发感觉Angularjs太重了,以至于后来重构项目时,毅然放弃Angularjs,投入了Vue的怀抱。除了组建团队时,是我搭建了基于Angularjs的前端开发框架,之后都是由前端小组开发。前段时间,由于公司层面的原因,整个团队解散,不得已我又要写前端程序了。 虽然前期Angular...