html5+ajax实现文件拖拽上传

使用HTML5的文件API,可以将操作系统中的文件直接拖放到浏览器的指定区域,实现文件上传到服务器。
实现步骤可以分为以下几步:

  1. 监听拖拽:监听页面元素的拖拽事件,包括:dragenter、dragover、dragleave和drop,一定要将dragover的默认事件取消掉,不然无法触发drop事件。如需拖拽页面里的元素,需要给其添加属性draggable=”true”
  2. 获取拖拽文件:在drop事件触发后通过e.dataTransfer.files获取拖拽文件列表,.length属性获取文件数量,.type属性获取文件类型。
  3. 发送图片:使用FormData模拟表单数据AJAX提交文件流。

下面就来看看代码如何实现吧

Html代码:

    <div>
        <div id="drop_area" style="border: 1px #ccc solid; height: 300px; width: 500px;">
            请将图片拖拽到此区域</div>
        <div id="preview">
        </div>
    </div>

Jquery代码:

<script type="text/javascript">
    $(function () {
        HoldbackBorwser(); //阻止浏览器默认行。 
        MonitorDrop(); //监听拖拽事件
    });
  
    //阻止浏览器默认行。 
    function HoldbackBorwser() {
        $(document).on({
            dragleave: function (e) {    //拖离 
                e.preventDefault();
            },
            drop: function (e) {  //拖后放 
                e.preventDefault();
            },
            dragenter: function (e) {    //拖进 
                e.preventDefault();
            },
            dragover: function (e) {    //拖来拖去 
                e.preventDefault();
            }
        });
    }
  
    //监听拖拽事件
    function MonitorDrop() {
        var box = document.getElementById('drop_area'); //拖拽区域 
        box.addEventListener("drop", function (e) {
            e.preventDefault(); //取消默认浏览器拖拽效果 
            var fileList = e.dataTransfer.files; //获取文件对象 
            //循环遍历文件对象
            for (var i = 0; i < fileList.length; i++) {
                //检测文件是不是图片 
                if (fileList[i].type.indexOf('image') === -1) {
                    alert("您拖的不是图片!");
                    return false;
                }
                //拖拉图片到浏览器,可以实现预览功能 
                var img = window.URL.createObjectURL(fileList[i]);
                var filename = fileList[i].name; //图片名称 
                var filesize = Math.floor((fileList[0].size) / 1024);
                if (filesize > 10240) {
                    alert("上传大小不能超过10M.");
                    return false;
                }
                var str = "<img src='" + img + "'><p>图片名称:" + filename + "</p><p>大小:" + filesize + "KB</p>";
                $("#preview").append(str);
  
                //上传 
                UploadFile(fileList[i]);
            }
        }, false);
    }
  
    //上传图片
    function UploadFile(fileArray) {
        var formData1 = new FormData();
        formData1.append('fileName1', fileArray);
        // 提交图片数量
        formData1.append('count', 1);
        //开始上传图片
  
        $.ajax({
            url: 'Handler.ashx',
            type: 'POST',
            data: formData1,
            contentType: false,
            processData: false,
            async: false,
            success: function (json) {
                if (json.status == "true") {
                    alert("上传成功!文件名为:" + json.data);
                }
                else {
                    alert(json.msg);
                    return false;
                }
            },
            error: function () {
            }
        })
    }
</script>

效果

在这里插入图片描述

Demo下载链接:https://pan.baidu.com/s/1LUh6qJM3CC_cSw4dO33H4w

提取码:wzmc

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值