Java實現拖拽上傳
阿新 • • 發佈:2017-06-19
itl filename 表單元 ava 100% ondrag nco write obj
原文:http://www.open-open.com/code/view/1437358795584
在項目開發中由於實際需求,需要開發拖拽上傳的功能,ok!
先看效果圖:
jsp上傳前端代碼:
<%@ 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]); xhr.send(formData); } }); } //直接調用 tm_upload(); </script> </html>
ok,編寫完前臺代碼,在寫後臺,如下:
<[email protected] import="java.util.UUID"%> <[email protected] import="org.apache.commons.fileupload.FileItem"%> <[email protected] import="java.util.Iterator"%> <[email protected] import="java.util.List"%> <[email protected] import="org.apache.commons.fileupload.servlet.ServletFileUpload"%> <[email protected] import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%> <[email protected] import="org.apache.commons.fileupload.FileItemFactory"%> <[email protected] 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,至此,就完成拖拽上傳的功能,當然這只是粗略版本,我已將代碼優化為插件可以直接使用了!!
Java實現拖拽上傳