Vue 做图片上传

  Vue图片单图或者多图上传代码如下:

<template>

<div class="upimgBox">

<div class="container">

<div class="upload_warp_left" @click="fileClick" >

<div class="addNote">+</div>

</div>

<!-- <div class="upload_warp_text">

选中{{imgList.length}}张文件,共{{bytesToSize(this.size)}}; 最多上传<span class="text-primary"> 6</span> 张图片!

</div> -->

<div class="upload_warp">

<div class="upload_warp_img" v-show="imgList.length!=0" >

<div class="upload_warp_img_div" v-for="(item,index) of imgList" :key="index">

<div class="upload_warp_img_div_top" >

<div class="upload_warp_img_div_del" @click="fileDel(index)">X</div>

</div>

<img :src="item.file.src">

</div>

</div>

</div>

<input @change="fileChange($event)" type="file" id="upload_file" multiple style="display: none"/>

</div>

</div>

</template>

<script>

export default {

name: "uploader",

data() {

return {

imgList: [],

size: 0

};

},

methods: {

fileClick() {

document.getElementById("upload_file").click();

},

fileChange(el) {

if (!el.target.files[0].size) return;

this.fileList(el.target.files);

el.target.value = "";

},

fileList(files) {

for (let i = 0; i < files.length; i++) {

this.fileAdd(files[i]);

}

},

fileAdd(file) {

// console.log(file, "54321");

this.size = this.size + file.size; //总大小

let reader = new FileReader();

reader.vue = this;

if (this.imgList.length <= 3) {

//判断限制图片上传张数

reader.readAsDataURL(file);

reader.onload = function() {

file.src = this.result;

this.vue.imgList.push({

file

});

};

// console.log(this.imgList, "12345");

} else {

this.$toast("最多上传四张图片");

}

},

fileDel(index) {

this.size = this.size - this.imgList[index].file.size; //总大小

this.imgList.splice(index, 1);

},

bytesToSize(bytes) {

if (bytes === 0) return "0 B";

let k = 1000, // or 1024

sizes = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"],

i = Math.floor(Math.log(bytes) / Math.log(k));

return (bytes / Math.pow(k, i)).toPrecision(3) + " " + sizes[i];

},

dragenter(el) {

el.stopPropagation();

el.preventDefault();

},

dragover(el) {

el.stopPropagation();

el.preventDefault();

},

drop(el) {

el.stopPropagation();

el.preventDefault();

this.fileList(el.dataTransfer.files);

}

}

};

</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->

<style scoped>

.upload_warp_img_div_del {

width: 16px;

right: 4px;

}

.upload_warp_img_div_top {

position: absolute;

top: 0;

width: 100%;

height: 20px;

background-color: rgba(0, 0, 0, 0.4);

color: #fff;

font-size: 12px;

display: flex;

justify-content: flex-end;

align-items: center;

/* border:1px solid red; */

}

.upload_warp_img_div img {

width: 100%;

height: 100%;

}

.upload_warp_img_div {

position: relative;

height: 73px;

width: 73px;

border: 1px solid #ccc;

margin: 0px 10px 5px 0px;

float: left;

text-align: center;

background-color: #eee;

cursor: pointer;

/* border:1px solid red; */

}

.upload_warp_img {

width: 100%;

/* border-top: 1px solid #d2d2d2; */

padding: 5px 0 0 8px;

overflow: hidden;

margin-top: 10px;

display: flex;

justify-content: flex-start;

align-items: center;

/* border: 1px solid black; */

}

/* .upload_warp_text {

text-align: left;

margin-bottom: 5px;

padding-top: 5px;

text-indent: 14px;

border-top: 1px solid #ccc;

font-size: 14px;

border:1px solid red;

} */

.upload_warp_right {

float: left;

width: 57%;

margin-left: 2%;

height: 100%;

border-radius: 4px;

line-height: 130px;

color: #999;

}

.addNote {

width: 60px;

height: 60px;

margin: 7px 5px 0px 8px;

cursor: pointer;

display: flex;

justify-content: center;

align-items: center;

font-size: 45px;

color: #bbbbbb;

border: 1px solid #bbbbbb;

}

.upload_warp_left {

float: left;

width: 100%;

height: 80px;

/* border: 1px solid red; */

}

.upload_warp {

width: 100%;

height: auto;

display: flex;

justify-content: space-around;

align-items: center;

/* border:1px solid black !important; */

}

.container {

width: 97%;

/* height: 80px; */

background-color: #fff;

padding: 3px;

margin: 0 auto;

/* border:1px solid green; */

}

.upimgBox {

width: 100%;

/* text-align: center; */

}

</style>

样式有稍微改动调整,亲测可用,转载原贴如下:https://blog.csdn.net/weixin_41957098/article/details/80351914

原文地址:https://www.cnblogs.com/golddemon/p/9747767.html

时间: 2024-08-09 12:48:43

Vue 做图片上传的相关文章

vue 的图片上传,压缩,exif图片信息识别(手机拍摄横板问题)

1.file表单组件监听change获取file文件 2.创建fileReader 获取base64位图片路由 3.实例一个Image 将base64位图片路由对其进行赋值,创建canvas 通过drawImage方法对其进行等比例缩放复制,实现图片压缩 4.引入 exif-js 模块 获取旋转角度信息,非1的,对canvas进行旋转,重绘,再通过toDataURL 获取旋转矫正后的图片64位 5.调用回调函数进行图片上传 //upload import EXIF from "exif-js&q

php做图片上传功能

今天来做一个图片上传功能的插件,首先做一个html文件:text.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head&g

vue实现图片上传

项目中用到的是上传头像,前端通过input[type="file"]来选择图片,给后端传递一个formData格式的数据,然后上传.代码如下: 我写了个组件,参数如下: uploadType: 上传类型 width: 图片显示的宽度 height: 图片显示的高度 imgUrl: 如果之前有图片,图片的路径地址 getImgUrl: 在组件里上传成功之后,会得到图片路径的相关参数,该方法在父组件里面调用来获取子组件里返回的图片路径参数,这个事件要看需求,在父组件里需不需要上传之后返回的

vue 实现图片上传与预览,以及清除图片

vue写原生的上传图片并预览以及清除图片的效果,下面是demo,其中里面有vue获取input框value值的方法以及vue中函数之间的调用 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片demo</title> <link rel="stylesheet" href="../../css/font-a

vuejs开发组件分享之H5图片上传、压缩及拍照旋转的问题处理

一.前言 三年.net开发转前端已经四个月了,前端主要用webpack+vue,由于后端转过来的,前端不够系统,希望分享下开发心得与园友一起学习. 图片的上传之前都是用的插件(ajaxupload),或者传统上传图片的方式,各有利弊:插件的问题是依赖jq并且会使系统比较臃肿,还有传统的web开发模式 前后端偶尔在一起及对用户体验要求低,现在公司采用webpack+vue+restfullApi开发模式 前后端完全分离,遵从高内聚,低偶尔的原则,开发人员各司其职,一则提升开发效率(从长期来看,短期

图片上传时遇到的问题

今天在用ssm框架做图片上传的时候遇见一个问题: 后来检查发现是springMVC配置文件中遗漏了关于图片上传的配置文件 把上面的<bean>配置好就可以了: 顺便总结一下: 图片上传只需要记住三件事: 前台页面:(1)要用post请求:(2)别忘了在form表单中加入enctype="multipart/form-data" 后台controller层要这样写: 3.如果上面代码没问题,就检查一下springmvc配置文件;

VUE2.0+VUE-Router做一个图片上传预览的组件

之前发了一篇关于自己看待前端组件化的文章,但是由于学习和实践的业务逻辑差异,所以自己练习的一些demo逻辑比较简单,打算用vue重构现在公司做的项目,所以在一些小的功能页面上使用vue来做的,现在写的这个是项目中用户反馈功能而来的,收获还是挺多的. 收获:dom操作=>数据操作       router的使用       组件的使用,具体总结放在尾部. 功能:1.上传图片 2.显示缩略图 3.可以删除 4.可以重新选择文件 先上成品图(主要抽取图片这块),自己在家主要做的功能,样式就不计较了.

vue 图片上传功能

这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下: <ul class="clearfix">   <li v-if="imgs.length>0" v-for='(item ,index ) in imgs'>   <img :src="item">   </li>   <li style="position:

vue项目富文本编辑器vue-quill-editor之自定义图片上传

使用富文本编辑器的第一步肯定是先安装依赖 npm i vue-quill-editor 1.如果按照官网富文本编辑器中的图片上传是将图片转为base64格式的,如果需要上传图片到自己的服务器,需要修改配置. 创建一个quill-config.js的文件,里面写自定义图片上传.代码如下 /*富文本编辑图片上传配置*/ const uploadConfig = { action: '', // 必填参数 图片上传地址 methods: 'POST', // 必填参数 图片上传方式 token: ''