html5拖拽事件 xhr2 实现文件上传 含进度条

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, minimum-scale=1, maximum-scale=1">
    <script type="text/javascript">

    </script>
    <style type="text/css">
        .want {
            border:2px solid red;
        }
        .nowant {
            border: 1px solid black;
        }
    </style>
</head>
<body>
    <div id="fileUpload" class="nowant" style="width: 200px; height: 200px;"></div>
    <div id="test"></div>
</body>

</html>
<script type="text/javascript">

    var isUpload = false;
    window.onload = function () {

        var targer = document.getElementById("fileUpload");
        //当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上
        targer.ondragenter = function (e) {
            if (isUpload) return;//如果正在上传中 则不允许再放置上传
            var types = e.dataTransfer.types;//该属性返回一个DOMStringList对象,该对象包括了存入dataTransfer中数据的所有类型。
            if (types && types.some(function(v) { return v === "Files" })) {
                return false;//阻止浏览器默认操作
            }
        }
        //拖拽元素在目标元素上移动的时候触发的事件,此事件作用在目标元素上
        targer.ondragover = function (e) {
            document.getElementById("fileUpload").classList.remove("nowant");
            document.getElementById("fileUpload").classList.add("want");
            return false;//阻止浏览器默认操作
        }
        // 在可拖动的元素移出放置目标时执行 JavaScript :
        targer.ondragleave = function (e) {
            document.getElementById("fileUpload").classList.remove("want");
            document.getElementById("fileUpload").classList.add("nowant");
            return false;
        }
        //在可拖动元素放置在 <div> 元素中时执行 JavaScript:
        targer.ondrop = function (e) {
            if (isUpload) return false;//在上传的途中不允许再上传
            console.log(e.dataTransfer);//这样输出是拿不到信息的
            var files = e.dataTransfer.files;//获得 放置的文件信息
            //这个例子只允许单文件上传哟
            if (files && files.length > 0&&files.length==1) {
                //创建xhr 使用xhr2  进行文件上传
                var xhr = new XMLHttpRequest();
                xhr.open("POST", "@Url.Action("Upload")");//设置上传方式以及处理请求地址
                var body = new FormData();//请求报文体数据存储点

                body.append("file",files[0]);
                //上传进度回调
                xhr.upload.onprogress=function(e) {

                    if (e.lengthComputable) {
                        document.getElementById("test").innerHTML = (e.loaded / e.total * 100) + "%";
                    }

                }
                xhr.onload=function(e) {
                    isUpload = false;//上传完成可继续拖拽上传
                }
                xhr.send(body);
                document.getElementById("fileUpload").classList.remove("want");
                document.getElementById("fileUpload").classList.add("nowant");
            }

            return false;//组织浏览器默认操作
        }
    }
</script>
时间: 2024-10-03 22:54:06

html5拖拽事件 xhr2 实现文件上传 含进度条的相关文章

atitit. 文件上传带进度条 atiUP 设计 java c# php

atitit. 文件上传带进度条 atiUP 设计 java c# php 1. 设计要求 1 2. 原理and 架构 1 3. ui 2 4. spring mvc 2 5. springMVC.xml 3 6. struts extand url 3 7. behide code 3 8. 简化设计 3 1. 设计要求 带进度条 完成提示动画效果.. 2. 原理and 架构 如果需要显示进度条,实时显示文件上传进度 需要使用Ajaxj技术..up到个在的iframe黑头.. 工作原理 其实际

atitit.文件上传带进度条的实现原理and组件选型and最佳实践总结O7

1. 实现原理 1 2. 大的文件上传原理::使用applet 1 3. 新的bp 2 1. 性能提升---分割小文件上传,避免一次使用内存使用过大的 2 2. Uuid还是原来文件名称:: 2 3. 监听器频繁地被调用 2 4. 结合wz easyui 2 4. 选型 2 5. Uploadify::yash js+flash 3 6. commons-fileupload:: 3 7. COS这个工具O'Reilly公司 3 8. 大的文件上传组件总结 3 5. 林吧实现ui Ajax+jq

简单实现一个文件上传的进度条

新手初学web 文件上传做完了 进度做了 没有进度条只有文字 不太好看  需要做个进度条  没有美工 网上很多的 进度条 需要图片 还有各种框架 看着好麻烦 只好自己弄一个 还挺简单的 没想象的那么复杂  分享一下 jsp页面 <tr> <td width="100">图片</td> <td> <div style="width: 450px;"> <div class="file-box&

Struts2文件上传带进度条,虽然不是很完美

好久没有写东西,最近在做个项目,要用到文件h 传的,以前虽然也做上传,但是总觉得不好用 ,现在和队友合作做了一个带进度条的上传,觉得还行~~和大家分享一下. 首先说一下大概是这样实现的,在我们平时的上传表单里面,除了文件上传之外,也许还有其他的信息需要填写的,这样问题就来了:点击上传按钮之后,这个表单都封装并提交上去了,在上传完成后整个页面就跳转了.而且也不利于我们验证用户输入.很多人这样做的,把这2个操作分开,当然这样也行... 我们这样做:一个普通页面(可以用于填写所有信息的),一个文件上传

jquery 实现拖动文件上传加进度条

通过对文件的拖动实现文件的上传,主要用到的是HTML5的ondrop事件,上传内容通道FormData传输: //进度条 <div class="parent-dlg" > <div class="progress-label">0%</div> <div class="son"></div> </div> //要拖动到的地方 <div class="main

BootStrap Progressbar 实现大文件上传的进度条

1.首先实现大文件上传,如果是几兆或者几十兆的文件就用基本的上传方式就可以了,但是如果是大文件上传的话最好是用分片上传的方式.我这里主要是使用在客户端进行分片读取到服务器段,然后保存,到了服务器段读取完了之后将分片数据进行组合. 2.前端代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UploadTest2.aspx.cs" Inherits="Htm

.net网站的文件上传读取进度条和断点下载

文件上传到服务器时的进度读取 UpfileResult result = new UpfileResult(); try { //先把文件预读到内存里,同时计算上传进度 IServiceProvider provider = (IServiceProvider)HttpContext.Current; // 返回 HTTP 请求正文已被读取的部分. HttpWorkerRequest request = (HttpWorkerRequest)provider.GetService(typeof(

.Net neatupload上传控件实现文件上传的进度条

1. 引入bin文件 (可以到neatupload官网下载,也可以到教育厅申报系统中找) 2. 将控件加入到工具栏,在工具栏中点鼠标右键,如图: 3. 加入neatuplaod这个文件夹(可以到neatupload官网下载,也可以到教育厅申报系统中找) 4. Webconfig的配置(3个地方) <configSections>配置节下配置: <!--配置NeatUpload sectionGroup配置节--> <sectionGroup name="system

php实现大文件上传带进度条

1.使用PHP的创始人 Rasmus Lerdorf 写的APC扩展模块来实现(http://pecl.php.net/package/apc) APC实现方法: 安装APC,参照官方文档安装,可以使用PECL模块安装方法快速简捷,这里不说明 配置php.ini,设置参数 apc.rfc1867=1 ,使APC支持上传进度条功能,在APC源码说明文档里面有说明 代码范例: 大文件(50G)上传的实现细节: 服务端接收文件数据的处理逻辑代码: 2.使用PECL扩展模块uploadprogress实