首页 > 其他分享 >HTML5应用之文件拖拽上传

HTML5应用之文件拖拽上传

时间:2023-12-26 15:35:36浏览次数:37  
标签:文件 drop fileList HTML5 var 上传 拖拽

使用HTML5的文件API,可以将操作系统中的文件拖放到浏览器的指定区域,实现文件上传到服务器。本文将结合实例讲解HTML5+jQuery+PHP实现拖拽上传图片的过程,来看下HTML5的魅力吧。

HTML

我们在页面中放置一个拖拽区域#drop_area,即接收拖拽的区域,#preview用来预览拖拽上传的图片信息。

1 <div id="drop_area">将图片拖拽到此区域</div> 
2 <div id="preview"></div> 

Javascript

要想实现拖拽,页面需要阻止浏览器默认行为,即四个事件(拖离、拖后放、拖进、拖来拖去),因为我们要阻止浏览器默认将图片打开的行为,这里我们使用jQuery来完成。

$(function(){ 
    //阻止浏览器默认行。 
    $(document).on({ 
        dragleave:function(e){    //拖离 
            e.preventDefault(); 
        }, 
        drop:function(e){  //拖后放 
            e.preventDefault(); 
        }, 
        dragenter:function(e){    //拖进 
            e.preventDefault(); 
        }, 
        dragover:function(e){    //拖来拖去 
            e.preventDefault(); 
        } 
    }); 
    ... 
}); 

接下来我们来了解下文件API。HTML5的文件API有一个FileList接口,它可以通过e.dataTransfer.files拖拽事件传递的文件信息,获取本地文件列表信息。

 var fileList = e.dataTransfer.files;  

使用files 方法将会获取到拖拽文件的数组形势的数据,每个文件占用一个数组的索引,如果该索引不存在文件数据,将返回 null 值。可以通过length属性获取文件数量.

 var fileNum = fileList.length;  

在本例中,我们用javascript来侦听drop事件,首先要判断拖入的文件是否符合要求,包括图片类型、大小等,然后获取本地图片信息,实现预览,最后上传。

 1 $(function(){ 
 2     ...接上部分 
 3     var box = document.getElementById('drop_area'); //拖拽区域 
 4     box.addEventListener("drop",function(e){ 
 5         e.preventDefault(); //取消默认浏览器拖拽效果 
 6         var fileList = e.dataTransfer.files; //获取文件对象 
 7         //检测是否是拖拽文件到页面的操作 
 8         if(fileList.length == 0){ 
 9             return false; 
10         } 
11         //检测文件是不是图片 
12         if(fileList[0].type.indexOf('image') === -1){ 
13             alert("您拖的不是图片!"); 
14             return false; 
15         } 
16          
17         //拖拉图片到浏览器,可以实现预览功能 
18         var img = window.webkitURL.createObjectURL(fileList[0]); 
19         var filename = fileList[0].name; //图片名称 
20         var filesize = Math.floor((fileList[0].size)/1024);  
21         if(filesize>500){ 
22             alert("上传大小不能超过500K."); 
23             return false; 
24         } 
25         var str = "<img src='"+img+"'><p>图片名称:"+filename+"</p><p>大小:"+filesize+"KB</p>"; 
26         $("#preview").html(str); 
27          
28         //上传 
29         xhr = new XMLHttpRequest(); 
30         xhr.open("post", "upload.php", true); 
31         xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
32          
33         var fd = new FormData(); 
34         fd.append('mypic', fileList[0]); 
35              
36         xhr.send(fd); 
37     },false); 
38 }); 

我们用FormData模拟表单数据,直接将数据append到formdata对象中,实现了ajax上传。

PHP

upload.php用于接收上传的文件信息,完成上传,实现代码如下:

 1 <?php 
 2 $mypic = $_FILES["mypic"]; 
 3 if(!empty($mypic)){ 
 4     $picname = $_FILES['mypic']['name']; 
 5     $picsize = $_FILES['mypic']['size']; 
 6     if ($picsize > 512000) { 
 7         echo '图片大小不能超过500k'; 
 8         exit; 
 9     } 
10     $type = strstr($picname, '.'); 
11     if ($type != ".gif" && $type != ".jpg") { 
12         echo '图片格式不对!'; 
13         exit; 
14     } 
15     $pics = 'helloweba' . $type; 
16     //上传路径 
17     $pic_path = "pics/". $pics; 
18     move_uploaded_file($mypic["tmp_name"],$pic_path); 
19 } 
20 ?> 
21 <meta charset="utf-8"> 
22 <form action="" method="post" enctype="multipart/form-data"> 
23 <input type="file" name="mypic"> 
24 <input type="submit" value="上传"> 
25 </form>  

最后总结下HTML5实现拖拽上传的技术要点:

1、监听拖拽:监听页面元素的拖拽事件,包括:dragenter、dragover、dragleave和drop,一定要将dragover的默认事件取消掉,不然无法触发drop事件。如需拖拽页面里的元素,需要给其添加属性draggable=”true”;

2、获取拖拽文件:在drop事件触发后通过e.dataTransfer.files获取拖拽文件列表,.length属性获取文件数量,.type属性获取文件类型。

3、读取图片数据并添加预览图。

4、发送图片数据:使用FormData模拟表单数据AJAX提交文件流。

 

参考文章:http://blog.ncmem.com/wordpress/2023/12/26/html5%e5%ba%94%e7%94%a8%e4%b9%8b%e6%96%87%e4%bb%b6%e6%8b%96%e6%8b%bd%e4%b8%8a%e4%bc%a0/

欢迎入群一起讨论

 

 

标签:文件,drop,fileList,HTML5,var,上传,拖拽
From: https://www.cnblogs.com/songsu/p/17928216.html

相关文章

  • 使用HTML5实现多文件上传
    入门Fileinput之所以叫fileinput是因为它是一个标准的input元素,且其type属性被设置为"file"。很多年以来,fileinput一次只能选择并上传单个文件。在新的HTML5规范中为input元素添加了多选模式。当然,不同浏览器对于规范的实现一直以来都不尽相同。比如,Firefox3.6和WebKit以及Fir......
  • JavaWeb - Day11 - 案例 - 员工管理、文件上传、修改员工、配置文件
    01.案例-员工管理-新增员工前面我们已经实现了员工信息的条件分页查询以及删除操作。关于员工管理的功能,还有两个需要实现:新增员工修改员工首先我们先完成"新增员工"的功能开发,再完成"修改员工"的功能开发。而在"新增员工"中,需要添加头像,而头像需要用到"文件上传"技......
  • HTML5 文件上传的2种方式
    以前上传文件需要提交Form表单。HTML5方式上传文件,可以通过使用FormData类模拟Form表单提交,从而实现无刷新上传文件。 假设有一个文件选择框<inputtype="file"name="pic"id="pic"accept="image/gif"/>有下面2种方式上传文件:1、XMLHttpRequest(有进度事件)varfiles=d......
  • .Net 利用Aspose.Words在上传word时将.doc转为.docx
    1、引用包Aspose.Words2、接口中使用:ListformFiles=new();foreach(IFormFileformFileinformCollection.Files){if(formFile.ContentType=="application/msword"){Streamfs=formFile.OpenReadStream();vardoc=newAspose.Words.Document(fs);Stream......
  • 使用git工具将本地文件上传到github仓库
    1、先创建一个文件夹2、gitinit:把文件夹变成git可管理的仓库3、gitadd.:“.”表示当前文件夹下所有内容都提交,也可以通过gitaddFileName/FolderName提交指定的文件或文件夹把文件添加到缓存区4、gitstatus:查看现在的状态5、gitcommit-m"description":把文件提交的本地......
  • html5实现文件批量上传组件
    一、概述在html5中,相对于之前添加了不少新的元素和属性,在javascript中也添加了一些新的API,这些给我们的开发带来了很多便利。但由于各浏览器的发展步骤不一致,也导致了不同浏览器对html5支持的差异性。 二、实现原理1.在该html5实现的文件批量上传组件中,我们主要是利用html5......
  • mysql 定时 数据库备份并上传到另一台服务器上,上传结束并删除源文件
    首先总共有两个脚本:#!/bin/bash:主要用于进行数据库备份、压缩、删除,单独运行命令是:bash XXX.sh#!/usr/bin/expect:主要用于进行数据备份文件的上传,单独运行命令是:expectXXX.sh这两个脚本都需要具有777权限:chmod777XXX.sh分成两个脚本写的原因是:expect主要是用于ssh远程......
  • HTML5文件上传操作
    一、File对象在HTML5出现之前,在Web上没有文件创建和复制,也没有文件处理,HTML5规范中包含3个文件相关的规范:“文件API”“文件API:目录和系统”以及“文件API:写入器”,文件API包含File对象、FileList对象和FileReader对象。为了保障客户端安全,大部分浏览器都未......
  • gitlab新建一个仓库,然后和本地代码关联,并上传本地代码到仓库中
    1.创建一个gitlab项目的仓库: 如果没有上传任何代码,这里Codetab会自动显示:从本地上传代码到仓库的操作命令:gitinitgitadd./gitcommit-m"firstcommit"gitbranch-Mmastergitremoteaddoriginhttps://oss.lalacorp.com/test-auttestapi/testforq.gitgitpush......
  • 可拖拽表单都有哪些特点?
    可拖拽表单拥有传统表单没有的优势和特点,在当前快节奏的现代化社会和职场中,拥有了非常多新老客户朋友的支持和青睐,成为助力企业实现流程化办公的有力武器。那么,可拖拽表单都有什么特点和优势?可以用在哪些领域里?带着这些问题,我们一起来探寻答案吧。在众多服务商中,有这么一家服务商......