Java實現拖拽上傳

jopen 9年前發布 | 5K 次閱讀 Java

在項目開發中由于實際需求,需要開發拖拽上傳的功能,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,編寫完前臺代碼,在寫后臺,如下:
    <%@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,至此,就完成拖拽上傳的功能,當然這只是粗略版本,我已將代碼優化為插件可以直接使用了!!

源碼下載:拖拽上傳源碼

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!