<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>vue.js图片上传工具代码 - 【更多源码:www.96flw.com】</title>
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
<link rel="stylesheet" href="css/upload-img.css">
</head>
<body>
<div id="app" class="container" v-cloak>
<div class="uploading-data" v-if="isUploading"></div>
<div class="upload-img-column">
<div class="words">上传图片 ({{imgTempList.length}}/5)</div>
<div class="upload-wrap">
<div class="box">
<label class="p dotted">
<input type="file" accept="image/jpg,image/jpeg,image/png" name="file"
@change="onChooseImage($event)">
<img src="./img/jiahao.png" alt="">
</label>
</div>
<template v-for="(imgItem, imgIndex) in imgTempList">
<div class="box">
<div class="p">
<img :src="imgItem">
<div class="delete" @click.stop="deleteImg(imgIndex)">
<img src="./img/guanbi.png" alt="">
</div>
</div>
</div>
</template>
</div>
</div>
<button class="l-btn" @click="onUploadImg">上传</button>
<!-- 图片上传成功后返回的路径(没必要的) -->
<div class="success-path">
<template v-for="(item, index) in successPath">
<a :href="item" target="_blank">{{item}}</a>
</template>
</div>
<!-- 压缩图片用的 -->
<canvas id="compressCanvas" style="position: fixed; z-index: -1; opacity: 0; top: -100%; left: -100%"></canvas>
</div>
<script src="js/vue.min.js"></script>
<script src="js/axios.min.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
imgTempList: [], //图片临时路径列表
isUploading: false, //是否正在上传
successPath: [], //上传成功后的路径(没必要)
},
mounted: function () {
var that = this;
},
watch: {},
methods: {
//选择图片
onChooseImage: function (event) {
var that = this;
//判断图片数量是否已上限
var currentImgTempArray = that.imgTempList;
if (currentImgTempArray.length >= 5) {
alert("最多上传5张图片");
return false;
}
//使用FileReader对文件对象进行操作
var reader = new FileReader();
reader.readAsDataURL(event.target.files[0]); //将读取到的文件编码成Data URL
reader.onload = function () { //读取完成时
var replaceSrc = reader.result; //文件输出的内容
//压缩图片处理
var image = new Image();
image.src = replaceSrc;
image.onload = function () {
//获取图片初始宽高
var width = image.width;
var height = image.height;
//判断图片宽度,再按比例设置宽度和高度的值
if (width > 1024) {
width = 1024;
height = Math.ceil(1024 * (image.height / image.width));
}
//将图片重新画入canvas中
var canvas = document.getElementById("compressCanvas");
var context = canvas.getContext("2d");
canvas.width = width;
canvas.height = height;
context.beginPath();
context.fillStyle = "#ffffff";
context.fillRect(0, 0, width, height);
context.fill();
context.closePath();
context.drawImage(image, 0, 0, width, height);
replaceSrc = canvas.toDataURL("image/jpeg"); //canvas转DataURL(base64格式)
//将压缩后的路径 追加到临时路径数组中
var totalList = [];
if (currentImgTempArray.length > 0) {
totalList = currentImgTempArray.concat(replaceSrc);
} else {
totalList[0] = replaceSrc;
}
that.imgTempList = totalList;
};
};
},
//删除某张图片
deleteImg: function (idx) {
var that = this;
that.imgTempList.splice(idx, 1);
},
//提交上传图片
onUploadImg: function () {
var that = this;
var imgTempList = that.imgTempList;
if (imgTempList.length > 0) {
that.isUploading = true; //正在上传 显示遮罩层 防止连续点击
var countNum = 0; //计算数量用的 判断上传到第几张图片了
//map循环遍历上传图片
imgTempList.map(function (imgItem, imgIndex) {
var files = that.dataURLtoFile(imgItem, 'pj' + Date.now() + '.jpg'); //DataURL转File
//创FormData对象
var formdata = new FormData();
//append(key,value)在数据末尾追加数据。 这儿的key值需要和后台定义保持一致
formdata.append('img', files);
//用axios上传,
axios({
method: "POST",
//url: "http://www.clluo.com:8060/uploadImg",
url: "http://图片上传路径",
data: formdata,
headers: {
"Content-Type": "multipart/form-data"
}
}).then(function (res) {
console.log(res);
countNum++;
console.log("第 " + countNum + " 张图片上传完成");
//图片全部上传完后去掉遮罩层
if (countNum >= imgTempList.length) {
that.isUploading = false;
}
//没必要的代码 👇
var list = [];
if (that.successPath.length > 0) {
list = that.successPath.concat(res.data.path);
} else {
list[0] = res.data.path;
}
that.successPath = list;
}).catch(function (error) {
console.error(error);
});
});
}
},
/**
* 将base64转换为文件
* @dataUrl base64路径地址
* @fileName 自定义文件名字
* */
dataURLtoFile: function (dataUrl, fileName) {
var arr = dataUrl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while (n--)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
vue.js图片上传工具代码.zip (5个子文件)
jiaoben7291
js
vue.min.js 80KB
img
guanbi.png 4KB
jiahao.png 1KB
css
upload-img.css 4KB
index.html 8KB
共 5 条
- 1
资源评论
码云笔记
- 粉丝: 2w+
- 资源: 5851
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Windows使用docker搭建多个GPU cuda版本的深度学习环境并用VSCode的SSH连接环境开发
- python从一个CSV文件中读取数据,对数据进行一些基本的数据清洗和分析,并使用matplotlib生成数据的可视化
- 文本分类-基于Pytorch实现的文本分类算法-附项目源码-优质项目实战.zip
- 五子棋游戏代码Python
- python读取一个包含销售数据的CSV文件,计算每个月的总销售额,并绘制出销售额的月变化图
- 一个简单的前端开发脚本示例,该脚本使用JavaScript和HTML来创建一个简单的网页,该网页包含一个按钮
- 基于JavaScript的餐饮外卖系统设计源码
- 仪器程控动态库NationalInstruments.NI4882.dll
- python读取CSV文件,进行数据处理绘制数据图
- 华为NAS管理工具OceanStor S2200T
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功