这次做了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里面的方法,具体如下:

  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 {
width: 100%;
height: auto;
}

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

.img-d span {
display: inline-block;
width: 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;
width: 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" id="up" 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 图片上传功能的更多相关文章

  1. H5 利用vue实现图片上传功能。

    H5的上传图片如何实现呢? 以下是我用vue实现的图片上传功能,仅供参考. <!DOCTYPE html> <html> <head> <meta chars ...

  2. vue图片上传组件

    前言:很多项目中都需要用到图片上传功能,而其多处使用的要求,为了避免重复造轮子,让我决定花费一些时间去深入了解,最终封装了一个vue的图片上传组件.现将总结再次,希望有帮助. Layout <d ...

  3. vue 图片上传

    功能说明: 1.调用手机拍照功能 2.调用相册功能 3.图片上传功能 4.图片预览功能 5.图片删除功能 关键点: .input 新增multiple .accept="image/*处理I ...

  4. thinkphp达到UploadFile.class.php图片上传功能

    片上传在站点里是非经常常使用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php).方便于我们去实现图片上传功能,以 ...

  5. Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能

    日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...

  6. PHP语言学习之php做图片上传功能

    本文主要向大家介绍了PHP语言学习之php做图片上传功能,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 今天来做一个图片上传功能的插件,首先做一个html文件:text.php < ...

  7. [Ting's笔记Day8]活用套件carrierwave gem:(3)Deploy图片上传功能到Heroku网站

    前情提要: 身为Ruby新手村民,创造稳定且持续的学习步调很重要,我用的方法就是一周在IT邦写三篇笔记,希望藉由把笔记和遇到的bug记录下来的过程,能帮助到未来想用Ruby on Rails架站的新手 ...

  8. 给DEDECMS广告管理中增加图片上传功能

    dedecms的广告管理功能稍微有点次,本文就是在dedecms广告管理原有的基础上增加广告图片上传功能. 安装方法,对应自己的dedecms版本下载对应的编码然后解压把里面的文件放在后台目录覆盖即可 ...

  9. 前端丨如何使用 tcb-js-sdk 实现图片上传功能

    前言 tcb-js-sdk 让开发者可以在网页端使用 JavaScript 代码服务访问云开发的服务,以轻松构建自己的公众号页面或者独立的网站等 Web 服务.本文将以实现图片上传功能为例,介绍 tc ...

随机推荐

  1. Homebrew(brew)安装MySQL@5.7及配置

    查找并确定自己需要安装的版本 brew search mysql ==> Formulae automysqlbackup mysql-connector-c mysql@5.5 mysql m ...

  2. <scrapy爬虫>scrapy命令行操作

    1.mysql数据库 2.mongoDB数据库 3.redis数据库 1.创建项目 scrapy startproject myproject cd myproject 2.创建爬虫 scrapy g ...

  3. [JZOJ3168] 【GDOI2013模拟3】踢足球

    题目 描述 题目大意 有两个队伍,每个队伍各nnn人. 接到球的某个人会再下一刻随机地传给自己人.敌人和射门,射门有概率会中. 每次射门之后球权在对方111号选手. 某个队伍到了RRR分,或者总时间到 ...

  4. HTML和css简单日常总结

    今天主要学习了两个部分:第一部分html:在w3school学习了一些标签的使用和一些属性和方法,例如一些标签<a>,<h1><h6><from>< ...

  5. React的PropTYpes

    React的PropTYpes和获取真实DOM 组件的属性可以接受任意值,字符串,对象,函数等等都可以.有时,我们需要一种机制,验证别人使用组件时,提供的参数是否符合要求. 组件类的PropsType ...

  6. light oj 1095 组合数学

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> ...

  7. Java常用英语汇总(面试必备)

    Java常用英语汇总(面试必备) abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存 ...

  8. 图解SQL的Join

    原文地址:http://coolshell.cn/articles/3463.html 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的 ...

  9. python3-常用模块之sys

    import syssys 是和Python解释器打交道的sys.argvprint(sys.argv) # argv的第一个参数 是python这个命令后面的值 主要用途 1. 程序员 运维人员 在 ...

  10. vue后台管理项目中菜单栏切换的三种方法

    第一种方法:vue嵌套路由(二) <el-menu :default-active="defaultActive" style="min-height: 100%; ...