2019独角兽企业重金招聘Python工程师标准>>>

直接上源码,就是样式不太好看,但是该有的功能都有啦

 <template><divclass="pre_upload"@drop="okdrop($event)"@dragover="allowDrop($event)"><div class="pre_leve_one"></div><div class="pre_leve_two"><h4>请把文件拖放到这里来</h4><divdi="files_data"class="pre_files_data"v-show="show_tab"><table class="pre_dataintable"><thead><tr><th>序号</th><th>名称</th><th>类型</th><th>Y/N</th><th>大小</th><th>进度</th><th>操作</th></tr></thead><tbody><trv-for="(item,index) in pre_flies":key="index"><td>{{item.id}}</td><tdclass="pre_tab_name"v-on:mousemove="lookImage(item)"v-on:mouseout="closeImage(item)">{{item.name}}</td><td>{{item.type}}</td><td>{{item.flag}}</td><td>{{item.size}}&nbsp;KB</td><td>{{item.up}}</td><td><buttonclass="pre_btn_canle"@click="del_files(item.id)">取消上传</button></td></tr></tbody></table><div><buttonclass="pre_btn_del_all"@click="canle_all">全部取消</button>&nbsp;&nbsp;<buttonclass="pre_btn_up"@click="submit_files">上传</button></div></div><!-- 使用画布验证上传图片转换是否正确  --><!-- <p>画布:</p><canvasid="myCanvas"width="500"height="300"style="border:1px solid #d3d3d3;background:#ffffff;">Your browser does not support the HTML5 canvas tag.</canvas>--><!-- 画布验证过程有异步 还是img直接 --><divclass="pre_show_img"v-show="show_img"><img :src="imgsrc"></div></div></div>
</template> <script>
/*
名称:拖放上传组件
日期:2019-03-14
作者:hj
目标:
1、将拖放的文件名称展示出来:拖放过来的有可能是一堆文件和文件夹混合 当放置被拖数据时,会发生 drop 事件。
2、显示上传文件的进度
3、最好可以支持预览(只可以图片预览)*/import { base_encode } from "@/utils/base64.js";
import { GetShort } from "@/utils/localstore.js";export default {name: "pre_uploadfile2",data() {return {pre_flies: [],exist_data: [],show_tab: false,show_img:false,imgsrc: ""};},  methods: {okdrop: async function(ev) {// 调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)ev.preventDefault();// 通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。// var data=ev.dataTransfer.getData("Text");var back_data = [],ok_data = [];back_data = ev.dataTransfer.files; //获取文件           for (var i = 0; i < back_data.length; i++) {var td = {};td.id = i + 1;td.name = back_data[i].name;td.type = back_data[i].type;// td.size=Math.round(Number(back_data[i].size)/1024);td.size = (Number(back_data[i].size) / 1024).toFixed(0);if (String(td.type).toLowerCase().indexOf(".exe") > 0) {td.flag = "NO";} else {td.flag = "YES";}td.up = 0 + "%";td.filedata = await this.convertFileToString(back_data[i]);        ok_data[i] = td;}var j = 0;j = this.exist_data.length; if (j > 0) {for (var i = 0; i < ok_data.length; i++) {this.exist_data[j] = ok_data[i];j += 1;}// 如果是多次拖放,需要进行二次整理var temp_d=[];for(var i=0;i<this.exist_data.length;i++){var temp_o={};temp_o.id = i + 1;temp_o.name = this.exist_data[i].name;temp_o.type = this.exist_data[i].type;temp_o.size = this.exist_data[i].size;temp_o.flag = this.exist_data[i].flag;temp_o.up = this.exist_data[i].up;temp_o.filedata= this.exist_data[i].filedata;temp_d[i]=temp_o;}this.pre_flies=temp_d;} else {this.exist_data = ok_data;this.pre_flies = this.exist_data;}this.show_tab = true;// var tf=document.getElementById("files_data");// tf.target.appendChild(files);},allowDrop: function(ev) {ev.preventDefault();},convertFileToString: function(tempfile) {return new Promise(resolve => {var tf = new FileReader();tf.readAsDataURL(tempfile);tf.onload = function() {resolve(this.result);};});},submit_files: async function() {this.exist_data = [];for (var i = 0; i < this.pre_flies.length; i++) {/*这块应该还可以用vuex 封装*/ var postdata = "";postdata ='{"action":"data_upfile_db","user_no":"' +GetShort("userno") +'","upfile_name":"' +this.pre_flies[i].name +'","upfile_type":"' +this.pre_flies[i].type +'","upfile_size":"' +this.pre_flies[i].size +'","upfile_data":"' +this.pre_flies[i].filedata +'"}';postdata ='{"method":"File_load","data":"' + base_encode(postdata) + '"}';var tp = this.pre_flies[i];await this.updatabyquere(postdata, tp);}},updatabyquere: function(postdata, tp) {this.$postfile("/Data_Back",postdata,res => {var loaded = 0,total = 0;loaded = res.loaded;total = res.total;this.$nextTick(() => {// console.log(tp);tp.up = ((loaded / total) * 100).toFixed(2) + " %";});}).then(res => {try {res = JSON.parse(res);res = res.data;if (res.status == 1) {tp.up = "上传成功";} else {tp.up = "上传失败";}} catch (ex) {tp.up = "上传失败";}});},del_files: function(id) {var data = []; var j=0;for (var i = 0; i < this.pre_flies.length; i++) {        if (this.pre_flies[i].id != id) {data[j] = this.pre_flies[i];j+=1;}}this.pre_flies = data;if (this.pre_flies.length == 0) {this.show_tab = false;}},canle_all: function() {this.pre_flies = [];      this.exist_data = [];this.show_tab = false;},lookImage:function(parm){console.log('进来'+parm.name);if (/\.(gif|jpg|jpeg|png|GIF|JPG|PNG|ico)$/.test(parm.name)) {this.imgsrc=parm.filedata;this.show_img=true;}},closeImage:function(parm){console.log('出去');this.show_img=false;}}
};
</script><style scoped>
.pre_upload {width: 100%;min-height: 200px;height: 100%;background-color: azure;text-align: center;/* padding: 10px 20px 10px 20px; */
}
.pre_leve_one {height: 5px;
}.pre_leve_two {/* padding: 5px; */margin: 15px;margin-top: 15px;border: 1px solid #191970;min-height: 200px;height: auto;
}.pre_files_data {width: 100%;min-height: 200px;height: auto;/* padding: 10px 20px 10px 20px; */
}.pre_files_data > ul {list-style: none;
}
.pre_files_data > ul > li {border: 1px solid black;
}
.pre_files_data > ul > li > span {margin-left: 5px;
}.pre_dataintable {margin-top: 15px;border-collapse: collapse;border: 1px solid #aaa;width: 95%;/* padding 没有作用 *//* padding: 0px 5px 10px 5px; */position: relative;left: 2%;
}
.pre_dataintable th {vertical-align: baseline;padding: 5px 15px 5px 6px;background-color: #c1ffc1;border: 1px solid #3f3f3f;text-align: left;color: #000000;font-size: 16px;font-weight: bolder;
}
.pre_dataintable td {vertical-align: text-top;padding: 6px 15px 6px 6px;border: 1px solid #aaa;
}
.pre_dataintable tr:nth-child(odd) {background-color: #f5f5f5;
}
.pre_dataintable tr:nth-child(even) {background-color: #fff;
}.pre_tab_name {cursor: pointer;
}
.pre_tab_name:hover {cursor: pointer;background-color: #aaa;
}
/* 全部取消按钮 */
.pre_btn_del_all {color: crimson;font-weight: bold;font-size: 16px;width: 100px;height: 30px;
}
/* 上传按钮 */
.pre_btn_up {color: chartreuse;font-weight: bold;font-size: 16px;width: 100px;height: 30px;
}
/* 删除按钮 */
.pre_btn_canle {color: crimson;font-weight: bold;font-size: 16px;width: 80px;height: 25px;
}
.pre_show_img {width: 400px;height: 400px;text-align: center;margin-top: -40px;/* background-color: #000000; */
}
.pre_show_img > img {width: auto;height: 100%;
}
</style>

转载于:https://my.oschina.net/qingqingdego/blog/3024860

vue组件系列2、拖放上传相关推荐

  1. 自定义vue组件--实现多图片上传

    一 引入 文件上传在日常的开发中是一项基本的操作,在前端中得以广泛的使用,因此将其封装成一个组件显得极为重要,本文主要是基于vue实现的自定义多图片上传组件. 二 自定义vue上传组件 MultiUp ...

  2. vue项目中实现头像上传的功能型组件

    @vue项目中实现头像上传的功能型组件 功能需求 实现个人中心的头像上传功能: 1.用户未上传过头像,展示设定好的默认头像(区分男女) 2.支持格式png.jpg.jpeg 3.图片大小:小于等于2M ...

  3. element显示服务器的图片,Vue+ElementUI+SpringMVC实现图片上传和回显

    Vue+ElementUI+SpringMVC实现图片上传和table回显 而我们也常遇到表单中包含图片上传的需求,并且需要在table中显示图片,所以这里我就讲一下结合后端的SpringMVC框架如 ...

  4. Vue+ElementUI+SpringMVC实现图片上传和回显

    Vue+ElementUI+SpringMVC实现图片上传和table回显 在之前我们已经讲过了 Vue+ElementUI+SpringMVC实现分页 . 而我们也常遇到表单中包含图片上传的需求,并 ...

  5. [一键CV] Blazor 拖放上传文件转换格式并推送到浏览器下载

    前言 昨天有个小伙伴发了一个老外java编写的小工具给我,功能是转换西班牙邮局快递Coreeos express的单据格式成Amazon格式,他的需求是改一下程序为匹配转换另一个快递公司MRW格式到A ...

  6. 使用vue+elementUi+springBoot实现图片上传,图片删除,图片展示

    使用vue+elementUi+springBoot实现图片上传,图片删除,图片展示 环境配置 准备环境 使用软件 图片上传 图片删除 图片显示 所有代码均为参考,每个人的方法不一样,效果不一样,该代 ...

  7. Springboot + Vue实现大文件切片上传

    Springboot + Vue实现大文件切片上传 大文件切片上传原理就是将一个大文件分成若干份大小相等的块文件,等所有块上传成功后,再将文件进行合并. 一.Springboot后端 1.实体TChu ...

  8. 优秀教程:创建基于 Ajax 的文件拖放上传功能

    分享来自 Tutorialzine 的优秀教程--创建基于 Ajax 的文件拖放上传功能,结合 jQuery File Upload 插件和 jQuery Knob 插件实现漂亮的 CSS3/JS 驱 ...

  9. vue上传文件到php,vue+axios+php如何实现上传文件功能?,formdata上传文件附加参数...

    vue+axios+php如何实现上传文件功能?Vue Axios PHP如何实现上传文件的功能?, 推荐:<PHP视频教程> 当我们提交表单时,我们经常会遇到一些表单提交要求.vue的a ...

最新文章

  1. Jsonplugin+struts2使用说明
  2. ACM的fflush(stdin)的问题
  3. 类加载器 java委托机制_解析Java虚拟机中类的初始化及加载器的父委托机制
  4. 大数据技术对企业的影响有哪些
  5. 这二十个问题,可能是你技术人生中已经或即将遭遇的痛点,怎么解?
  6. 孙鑫VC学习笔记:第十二讲 (五) 往win.ini的文件中写入数据
  7. 设备发现协议SSDP实现
  8. 小米路由器青春版 SSH密码根据SN破解
  9. 兼容PD和QC快充充电器输入单节锂电池2A充电芯片-2号电路板
  10. 如何拆分PDF文件?来看这两种方法
  11. 阿里巴巴达摩院发布2019十大科技趋势:语音AI在特定领域通过图灵测试...
  12. 我来告诉你,一个草根程序员如何逆袭,成功进入BAT!
  13. 【译】UI 的黑暗面!暗色背景的优势
  14. 影像有理函数纠正RFM/RPC
  15. 【文档】Word如何将一个文档的样式复制到另一个文档中
  16. 4G5G相关缩略词中文及功能简述
  17. 有源滤波器: 基于UAF42的50Hz陷波器仿真
  18. Stealth-Persist混合内存系统中持久应用程序的体系结构支持
  19. 年会公众号签到,签到墙,抽奖归纳
  20. vanilla js_用Vanilla js编写前端组件

热门文章

  1. 全球及中国停车场建设产业十四五盈利模式与建设现状分析报告2022版
  2. 全球及中国汽车紧急呼叫终端行业运营模式及未来投资方向建议报告2022版
  3. (转)完全使用gnu/linux工作
  4. android虚拟机的垃圾收集
  5. Linux 桌面的安装
  6. !!导致大智慧公式总是死循环的编码风格
  7. struts-dojo的使用
  8. 守望者的逃离—贪心算法
  9. 兼容多种屏幕分辨率的通栏大图实现方法
  10. 提高网站首页载入速度的常用方法