功能说明:

1、调用手机拍照功能

2、调用相册功能

3、图片上传功能

4、图片预览功能

5、图片删除功能

关键点:

、input 新增multiple
、accept="image/*处理IOS、安卓手机启用摄像头
、根据createObjectURL处理图片预览
、formData构造函数创建空对象
、通过formData.getAll(),把文件流数据转为数组

组件示例图

组件代码 upload_img.vue

<template>
<div class="content">
<div class="imgBox">
<div class="uploadBox" v-for="(value, key) in imgs" :key="'uploadBox' + key">
<img :src="getObjectURL(value)" alt="" class="uploadImg">
<img src="../../assets/images/icon_x.png" alt="" class="closeImg" @click='delImg(key)'>
</div>
<div class="inputButton">
<img src="../../assets/images/icon_photo.png" alt="" class="addImg">
<input type="file" class="upload" @change="addImg" ref="inputer" multiple
accept="image/*"/>
</div>
<div class="submitTask" @click="submit">
上传图片
</div>
</div>
</div>
</template>

js:

export default ({
name: 'uploadPicture',
data: function() {
return {
formData: new FormData(),
imgs: {},
imgLen: ,
txtVal: ,
desc: '' }
},
created() { },
methods: {
descInput() {
// this.txtVal = this.desc.length;
},
addImg(event) {
let inputDOM = this.$refs.inputer
// 通过DOM取文件数据
this.fil = inputDOM.files
// console.log(inputDOM.files)
let oldLen = this.imgLen
for (let i = ; i < this.fil.length; i++) {
let size = Math.floor(this.fil[i].size / )
if (size > * * ) {
alert('请选择5M以内的图片!')
return false
}
this.imgLen++
this.$set(this.imgs, this.fil[i].name + '?' + new Date().getTime() + i, this.fil[i])
// console.log(this.imgs)
}
console.log('this.fil', this.fil)
// this.imgs = this.fil
},
getObjectURL(file) {
var url = null
if (window.createObjectURL !== undefined) { // basic
url = window.createObjectURL(file)
} else if (window.URL !== undefined) { // mozilla(firefox)
url = window.URL.createObjectURL(file)
} else if (window.webkitURL !== undefined) { // webkit or chrome
url = window.webkitURL.createObjectURL(file)
}
return url
},
delImg(key) {
this.$delete(this.imgs, key)
this.imgLen--
},
// 提交上传图片
submit() {
for (let key in this.imgs) {
let name = key.split('?')[]
this.formData.append('file', this.imgs[key])
}
this.formData.getAll('file')
console.log('this.formData', this.formData)
this.$refund.upload(this.formData)
}
}
})
</script>

说明:

图片上传完成后,使用getObjectURL来作预览功能处理。

温馨提示:

formData.getAll最后返回来的是一个数组

样式:

<style lang="less">
// 外部盒子样式
.content {
width: %;
padding: .16rem !important;
.imgBox {
display: flex;
display: -webkit-flex;
flex-direction: row;
justify-content: flex-start;
align-items: center;
flex-wrap: wrap;
}
} // 预览图片样式
.uploadBox {
position: relative;
width: %;
text-align: left;
margin-right: .1rem;
margin-bottom: .05rem;
// 预览样式
.uploadImg {
width: %;
height: %;
display: block;
overflow: hidden;
}
// 删除按钮
.closeImg {
width: .2rem;
height: .2rem;
position: absolute;
top: %;
right: %;
}
}
// 上图图片icon
.inputButton {
position: relative;
display: block;
width: .2rem;
height: .2rem;
// 上传图片样式
.addImg {
display: block;
width: .2rem;
height: .2rem;
}
// input样式
.upload {
width: .2rem;
height: .2rem;
opacity: ;
position: absolute;
top: ;
left: ;
z-index: ;
}
}
// 提交按钮
.submitTask {
margin: auto;
background: #EF504D;
width: %;
height: .3rem;
color: #fff;
font-size: .16rem;
line-height: .3rem;
text-align: center;
border-radius: .1rem;
margin-top: .8rem;
}
</style>

欢迎关注公众号,进一步技术交流:

vue 图片上传的更多相关文章

  1. vue图片上传组件

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

  2. vue 图片上传功能

    这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下:   <ul class="clearfix">   ...

  3. vue图片上传的简单组件

    <template> <div class="rili" id="rili"> <div class="updel&qu ...

  4. 保姆级SpringBoot+Vue图片上传到阿里云OSS教程

    小二是新来的实习生,作为技术 leader,我给他安排了一个非常简单的练手任务,把前端 markdown 编辑器里上传的图片保存到服务器端,结果他真的就把图片直接保存到了服务器上,这下可把我气坏了,就 ...

  5. vue图片上传

    之前花了两个月用vue做了一个建筑照片我的webApp,前端就我一人,负责用vue写页面对接接口,后台一个程序员负责写接口,嵌套个安卓ios的壳.搞的是风风火火,过程也是很心累,大多不在技术,在于所谓 ...

  6. vue图片上传到七牛云

    代码: <template> <div class="upload-info"> <div> <el-upload class=" ...

  7. vue图片上传及java存储图片(亲测可用)

    1.前言 在使用elementui的upload组件时,我一直无法做到上传的图片和其他数据一起提交.单纯的上传文件,java的存储图片的方式也有局限性. 我知道的后端保存图片有两种方式:一种是直接存储 ...

  8. 后台管理系统之“图片上传” --vue

    图片上传(基于vue) 相信上传图片是所有系统必备的功能吧,工作中的第一个管理系统就在上传图片的功能上卡顿了一整天. 当时用的elementUI组件,但是由于样式和设计图样式差别较大再加上原生相较好理 ...

  9. vue+axios实现移动端图片上传

    在利用vue做一些H5页面时,或多或少会遇到有图片上传的操作,主要是运用html5里面的input[type=file]来实现,传递到后端的数据是以二进制的格式传递,所以上传图片的请求与普通的请求稍微 ...

随机推荐

  1. CentOS7/RHEL6下,如何查看目录与子目录大小

    原文:CentOS7/RHEL6下,如何查看目录与子目录大小 通过强大的[du]命令,可以帮助我们快捷的查看目录的大小,非常实用. du命令用来查看目录或文件所占用磁盘空间的大小.常用选项组合为:du ...

  2. SQL Server 输出 XML

    一.概述 SELECT 查询将结果作为行集返回.在 SQL 查询中指定 FOR XML 子句,从而将该查询的正式结果作为 XML 来检索.FOR XML 子句可以用在顶级查询和子查询中.顶级 FOR ...

  3. .netcore 输出 json 的变量命名格式

    从mvc  迁移到的 .netcore mvc 的时候 ,发现很多js 报错,查了一下  居然是变量的大小改变了,这个需要到 starup.cs 设置 //设置返回 json 格式 首字母问题 按原格 ...

  4. git命令 撤销文件修改

    git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git checkout src/views/useChapter.vue #撤销项目目录 src/views/文件夹 ...

  5. 改写Unity DropDown 支持多次点击同一选项均回调

    [很久前的一个Note,不知道现在的Unity Dropdown是否已经支持该特性] Unity UGUI是开源的: https://bitbucket.org/Unity-Technologies/ ...

  6. pkg-config命令

    返回已安装库文件的元信息 pkg-config读取.pc文件获取信息 基本思想 编译的时候-I指定头文件路径:-L指定库文件路径.这样做总感觉很麻烦 事先把库的位置信息等保存起来,需要的时候再通过特定 ...

  7. ASE19团队项目 beta阶段 model组 scrum5 记录

    本次会议于12月6日,19时30分在微软北京西二号楼sky garden召开,持续20分钟. 与会人员:Jiyan He, Lei Chai, Linfeng Qi, Xueqing Wu, Kun ...

  8. 线段树lazy模板 luogu3372

    线段树写得很少,这么基本的算法还是要会的…… #include<bits/stdc++.h> using namespace std; inline long long read() { ...

  9. Linux路径切换命令——directory stack

    操作directory stack一共需要3个命令: dirs .pushd.popd dirs: 显示当前目录栈 pushd: 把目录压栈 popd: 把目录弹栈 dirs 显示目录栈内容,如果没有 ...

  10. 马的遍历(BFS

    https://www.luogu.org/problemnew/show/P1443 模板BFS...... #include<iostream> #include<cstdio& ...