在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java实现拖拽上传

2016-12-20 13:15| 发布者: zhangjf| 查看: 432| 评论: 0

摘要: 在项目开发中由于实际需求,需要开发拖拽上传的功能,ok! 先看效果图: jsp上传前端代码: %@ page language=java contentType=text/html; charset=UTF-8 pageEncoding=UTF-8% !DOCTYPE html ...

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


先看效果图:

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

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

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

源码下载:拖拽上传源码

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-8 11:00

Copyright 2015-2025 djqfx

返回顶部