Java实现拖拽上传

原文: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,编写完前台代码,在写后台,如下:

 <%@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,至此,就完成拖拽上传的功能,当然这只是粗略版本,我已将代码优化为插件可以直接使用了!!

时间: 2024-10-21 02:42:51

Java实现拖拽上传的相关文章

jQuery插件之路(三)——文件上传(支持拖拽上传)

好了,这次咱一改往日的作风,就不多说废话了,哈哈.先贴上源代码地址,点击获取.然后直接进入主题啦,当然,如果你觉得我有哪里写的不对或者欠妥的地方,欢迎留言指出.在附上一些代码之前,我们还是先来了解下,上传文件的时候需要利用的一些必要的知识. 首先我们要说的就是FileReader对象,这是一个HTML5提出的,专门用来异步的读取用户计算机上文件的对象,这里有详细的介绍.所以如果我们想要使用它,那么首先我们得先创建一个FileReader对象. var fr = new FileReader()

windows客户端开发--使你的输入框具有拖拽上传的功能

今天谈一天windows客户端拖拽上传功能. 其实主要是拖拽功能,上传是自己实现的. DragAcceptFiles 函数 最重要的就是这个函数了,看看作用: Registers whether a window accepts dropped files 原型: VOID DragAcceptFiles( HWND hWnd, BOOL fAccept ); 参数: hWnd Type: HWND The identifier of the window that is registering

File杂谈——拖拽上传前传

在<[File杂谈--初识file控件](http://www.seejs.com/archives/668 "File杂谈--初识file控件")>一文中,我们已经对file控件有了初步的了解,并且对制作一个视觉和体验一致的file控件做了较为详细的说明,今天我们继续了解file控件的更多特性,并延伸出更多. ## 新增属性 在HTML5到来之前,绝大多数情况下使用file控件,我们前端工程师需要的有用信息都只能通过value属性获得的文件名字符串来获取(比如:文件类型.

原生API实现拖拽上传文件实践

功能: 拖拽上传文件.图片,上传的进度条,能够同时上传多个文件. 完整的demo地址:https://github.com/qcer/FE-Components/tree/master/QDrag 涉及到的API: 1.HTML5的拖拽事件:dragenter,dragover,drop等 2.XMLHttpRequest  Level2 3.FormData 4.(扩展:HTML5的File API) 概述: 1.利用拖拽实践的API将一个普通的div自定义成一个放置目标,这里有一个技巧是放置

dropzonejs中文翻译手册 DropzoneJS是一个提供文件拖拽上传并且提供图片预览的开源类库.

http://wxb.github.io/dropzonejs.com.zh-CN/dropzonezh-CN/ 由于项目需要,完成一个web的图片拖拽上传,也就顺便学习和了解了一下前端的比较新的技术:HTML5的api,作为一名前端的菜鸟,没什么可说的,直接分享自己学习的资料: 关于HTML5 的这些新的特性大家可以到Mozilla的开发者社区MDN https://developer.mozilla.org/zh-CN/ 上查HTML5的资料 还有就是发掘到的比较牛逼的一篇博客:http:/

拖拽上传功能

拖拽上传功能旨在实现拖拽文件或者图片上传到你想要保存到的地方.此处上传的是xml文件,可以在里面对文件类型进行限制: 声明:现在的ie浏览器9及以下的版本并不支持该方法实现拖拽上传,如果有大神可以分享ie9及以下的拖拽上传方法将不胜感激: 代码: <body><div id="div">    <h1 align="center">拖拽上传</h1>    <form   id="form1"

Dropzone.js实现文件拖拽上传

dropzone.js是一个开源的JavaScript库,提供 AJAX 异步文件上传功能,支持拖拽文件.支持最大文件大小.支持设置文件类型.支持预览上传结果,不依赖jQuery库. 查看演示 下载源码 使用Dropzone 我们可以建立一个正式的上传form表单,并且给表单一个.dropzone的class. <form id="mydropzone" action="/upload.php" class="dropzone">&l

[开源应用]利用HTML5+resumableJs拖拽上传大文件

前言: 大文件传输一直是技术上的一大难点.文件过大时,一些性提交所有的内容进内存是不现实的.大文件带来问题还有是否支持断点传输和多文件同时传输. 本文以resumableJs为例,介绍了如何在ASP.NET中实现大文件传输.同时本文利用了Html5的新特性:支持拖拽. 本文的主要技术点在于:如何接收resumableJs的传送内容(官网不太清楚)和如何合并文件,难度并不高. 注:原博客中,此文章为原站点个人代码备份所用,注释不多,如有不懂,请在评论中给出. 效果: ASPX File: <htm

Nodejs express、html5实现拖拽上传

Nodejs express.html5实现拖拽上传 一.前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传.给用户体验带来很大问题.html5开始支持拖拽上传的需要的api.nodejs也是一个最近越来越流行的技术,这也是自己第一次接触nodejs,在nodejs开发中,最常用的开发框架之一是expess,它是一个类似mvc模式的框架.结合html5.nodejs express实现了拖拽上传的功能. 二.基础知识普及 1.No