Java实现拖拽上传

简介:

Java实现拖拽上传


在项目开发中由于实际需求,需要开发拖拽上传的功能,ok!


先看效果图:


wKiom1THPUWwkhPHAAFOgK7XQ9E735.jpg



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
< html >
< head >
< meta  http-equiv = "Content-Type"  content = "text/html; charset=UTF-8" >
< title >小夜的传说最新力作!</ title >
< style  type = "text/css" >
* {
     padding: 0px;
     margin: 0px;
}
 
body {
     background: #394E48;
     font-size: 14px;
     font-family: "微软雅黑";
}
 
.title {
     text-align: center;
     color: #fff;
     margin-top: 50px;
}
 
.demo {
     width: 900px;
     height: 140px;
     margin: 50px auto;
}
 
.drag-area {
     width: 100%;
     height: 100px;
     border: 3px dashed #fff;
     text-align: center;
     line-height: 100px;
     color: #fff;
     font-size: 36px;
     font-weight: 700;
}
 
}
.preview div {
     width: 195px;
     overflow: hidden;
     border: 1px dashed silver;
     margin-top: 10px;
     float: left;
     padding: 9px;
     text-align: center;
     height: 168px;
}
 
.preview img {
     width: 80px;
     height: 80px;
}
</ style >
</ head >
< body >
     < h1  class = "title" >小夜的传说最新力作!Java实现拖拽上传!!</ h1 >
      < div  class = "demo" >
        < div  class = "drag-area"  id = "upload-area" >
            将图片拖拽到这里
        </ div >
        <!-- 图片预览 -->
        < div  id = "preview"  class = "preview" ></ div >
      </ div >
</ body >
< script  type = "text/javascript" >
     //1、文件上传HTML5 通过drag把文件拖拽到浏览器的默认事件覆盖
     //文件离开
     document.ondragleave=function(e){
     e.preventDefault();
         console.info("文件离开执行了我!!");
     };
     //鼠标松开文件
     document.ondrop=function(e){
     e.preventDefault();
         console.info("松开以后执行了我!");
     };
     //鼠标移动文件
     document.ondragover=function(e){
     e.preventDefault();
         console.info("文件移动以后执行了我!");
     };
     
     function tm_upload(){
         var img1="";
         var uploadArea=document.getElementById("upload-area");
         //2、通过HTML5拖拽事件,ondrop,然后通过拖动区域监听浏览器的drop事件达到文件上传的目的
         uploadArea.addEventListener("drop", function(e){
             e.preventDefault();
             //3、从事件event中获取拖拽到浏览器的文件信息
             var fileList=e.dataTransfer.files;
             for(var i=0;i< fileList.length ;i++){
                 //此处判断只能上传图片
                 if(fileList[i].type.indexOf("image")!=0){
                     alert("请上传图片");
                     return;            
                 }
                 //图片预览  这一步需要判断是什么浏览器  大家自己判断吧
                 /*************************************/
                 img1 = window .URL.createObjectURL(fileList[i]);
                 /*************************************/
                 var str="<div>< img  src = '"+img1+"' />< p >"+fileList[i].name+"</ p ></ div >";
                 document.getElementById("preview").innerHTML +=str;
                 
                 var fileName=fileList[i].name;
                 console.info(fileName);
                 var fileSize=fileList[i].size;
                 console.info(fileSize);
                 //4、通过XMLHttpRequest上传文件到服务器  就是一个ajax请求
                 var xhr=new XMLHttpRequest();
                 //5、这里需要先写好一个data.jsp的上传文件,当然,你写成servlet或者是action都可以
                 xhr.open("post","data.jsp",true);
                 xhr.setRequestHeader("X-Request-Width", "XMLHttpRequest");
                 //6、通过HTML5 FormData动态设置表单元素
                 var formData=new FormData();//动态给表单赋值,传递二进制文件
                 //其实就相当于< input  type = "file"  name = "file" />
                 formData.append("doc",fileList[i]);
             //7、这一步核心的我隐藏了,需要的话请下载源码,或者看你悟性了
             }
         });
     }
     //直接调用
     tm_upload();
</ script >
</ html >


ok,编写完前台代码,在写后台,如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<%@page import="java.util.UUID"%>
<%@page import="org.apache.commons.fileupload.FileItem"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.List"%>
<%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@page import="org.apache.commons.fileupload.FileItemFactory"%>
<%@page import="java.io.File"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
<%
/*
1、文件上传:
 
*/
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//获取文件路径
String strPath=request.getRealPath("/")+"/upload";
File file =new File(strPath);
if(!file.exists())file.mkdirs();
FileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
//从请求对象中获取文件信息
List items=    upload.parseRequest(request);
if(items!=null){
     for(int i=0;i< items.size ();i++){
         Iterator  iterator = items .iterator();
         while(iterator.hasNext()){
         FileItem item=(FileItem)iterator.next();
         if(item.isFormField()){
             continue;
         }else{
             String  fileName = item .getName();
             Long  fileSize = item .getSize();
             int  pos = fileName .indexOf(".");
             String  ext = fileName .substring(pos,fileName.length()); 
            fileName = UUID .randomUUID().toString()+ext;
            File  saveFile = new  File(strPath,fileName);
            item.write(saveFile);
          }
         }
     }
}
  %>


ok,至此,就完成拖拽上传的功能,当然这只是粗略版本,我已将代码优化为插件可以直接使用了!!


源码下载:http://down.51cto.com/data/1978952










本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1608833,如需转载请自行联系原作者
目录
相关文章
|
Java
Java 实现汉字按照首字母分组排序
Java 实现汉字按照首字母分组排序
712 0
|
Java 数据安全/隐私保护
JAVA 实现上传图片添加水印(详细版)(上)
JAVA 实现上传图片添加水印(详细版)
1258 0
JAVA 实现上传图片添加水印(详细版)(上)
|
网络协议 Java
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
ip地址的分类: 1、ipv4、ipv6 127.0.0.1:4个字节组成,0-255,42亿;30亿都在北美,亚洲就只有4亿 2011年就用尽了。
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
|
Java
Java实现拼图小游戏(7)——查看完整图片(键盘监听实例2)
由于在移动和图片中我们已经添加了键盘监听,也继承了键盘监听的接口,那么我们只需要在重写方法内输入我们的代码即可
217 0
|
存储 Java
Java实现图书管理系统
本篇文章是对目前Java专栏已有内容的一个总结练习,希望各位小主们在学习完面向对象的知识后,可以阅览本篇文章后,自己也动手实现一个这样的demo来加深总结应用已经学到知识并进行巩固。
417 0
Java实现图书管理系统
|
数据可视化 Java
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
如果要在某一个界面里面添加功能的话,都在一个类中,会显得代码难以阅读,而且修改起来也会很困难,所以我们将游戏主界面、登录界面、以及注册界面都单独编成一个类,每一个类都继承JFrame父类,并且在类中创建方法来来实现页面
536 0
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
|
数据可视化 Java 容器
Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现
注意由于我们计步功能的步数要在重写方法中用到,所以不能将初始化语句写在方法体内,而是要写在成员位置。在其名字的时候也要做到“见名知意”,所以我们给它起名字为step
322 0
Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现
|
Java
Java实现拼图小游戏(7)—— 作弊码和判断胜利
当我们好不容易把拼图复原了,但是一点提示也没有,完全看不出来是成功了,那么我们就需要有判断胜利的功能去弹出“成功”类的图片,以便于玩家选择是重新开始还是退出小游戏
307 0
Java实现拼图小游戏(7)—— 作弊码和判断胜利
|
Java
Java实现拼图小游戏(6)—— 移动图片(键盘监听实操练习)
当我们实现向上移动图片的时候,其实就是把空图片的下面一张图片往上移动,然后将空图片的下面那张图片设置为空图片,最后再调整初始位置为现在空图片所在位置即可,注意做完这些以后还要再加载图片,否则显示不出来
384 0
Java实现拼图小游戏(6)—— 移动图片(键盘监听实操练习)
|
存储 Java 数据库
JAVA实现网络多线程编程小游戏开发
实验总结:五子棋是一个很简单的游戏,但是如果认真对待,一个代码一个代码的去研究,会收获到很多知识,会打好学习基础。方便以后开发更高、更难的项目时打下稳固的基础。在自己开发的过程中会有各种意想不到的bug,通过查阅资料及询问老师同学进行解决对本身的一个代码能力会有一个质的增长,同时这也是一个非常快乐的过程。有进步,总归是好事。
JAVA实现网络多线程编程小游戏开发