博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
thinkphp5 多图片拖拽上传,自己写的,不足之处请指正~
阅读量:6820 次
发布时间:2019-06-26

本文共 3622 字,大约阅读时间需要 12 分钟。

hot3.png

话不多说,直接放代码。

前端页面:

    <h1 align="center">这是标题</h1>
    <h2 style="color:red;margin-left:200px;"><b>拖拽图片上传</b></h2>
    <div id="imgs" draggable="true" style="width:1000px;margin:0 auto;height:400px;border:1px solid red;"></div>
    <button type="button" id="btns" style="margin-left:300px;margin-top:30px;">上传图片</button>
    <input type="hidden" name="car_id" gid="{$id}" id="car_id" value="{$id}" />
<script type="text/javascript">
    var oDragWrap = $("#imgs")[0];
    //拖进
    oDragWrap.addEventListener('dragenter', function(e) {
        e.preventDefault();
    }, false);
    //拖离
    oDragWrap.addEventListener('dragleave', function(e) {
        dragleaveHandler(e);
    }, false);
    //拖来拖去 , 一定要注意dragover事件一定要清除默认事件
    //不然会无法触发后面的drop事件
    oDragWrap.addEventListener('dragover', function(e) {
        e.preventDefault();
    }, false);
    //扔
    oDragWrap.addEventListener('drop', function(e) {
        dropHandler(e);
    }, false);
     //提交的整个formData的个数
    var allfileList = [];
    var total = new FormData(oDragWrap);

    var dropHandler = function(e) {

        //将本地图片拖拽到页面中后要进行的处理都在这
        e.preventDefault();
        var fileList = e.dataTransfer.files;  //获取文件列表
        // console.log(fileList);
        var img = document.createElement('img');
       //检测是否是拖拽文件到页面的操作
        // console.log(fileList.length);
        if ( fileList.length == 0 ) { alert( '未得到图片信息' ); return false; }
        //得到所有的图片张数
        for ( var i = 0 ; i < fileList.length ; i++ ) {
            if (fileList[i].type.indexOf('image') === -1) {alert('上传类型不是图片');return false;}
            if (window.URL.createObjectURL) {
                img.src = window.URL.createObjectURL(fileList[i]);  //FF4+
            } else if (window.webkitURL.createObjectURL) {
              img.src = window.webkitURL.createObjectURL(fileList[i]);//Chrome8+
            } else {
              var reader = new FileReader();//实例化file reader对象
              reader.onload = function(e) {
                  img.src = this.result;
                    // oDragWrap.appendChild(img);
              }
              reader.readAsDataURL(fileList[i]);
            }
    var str = '<img src='+img.src+' style="margin-left:10px;margin-top:10px;;width:150px;height:120px;" alt='+fileList[i].name+' />';
            $("#imgs").append(str);
            allfileList.push(fileList[i]);

        //将所有的图片对象放入到formdata中

            total.append("img[]",allfileList[i]);
        }
        // console.log(fileList);
        // console.log(allfileList);
        // console.log(total);
    }

    $("#btns").click(function(){

        total.append("car_id",$("#car_id").attr("gid"));
        $.ajax({
            type:'post',
            dataType:'json',
            data:total,
            url: "{:url('admin/wechat/do_add_carpic')}",
            processData: false,
            contentType: false,
            success:function(res){
                if(res.code == 0){
                    alert(res.msg);
                }else if(res.code == 1){
                    alert(res.msg);
                    window.location.href="{:url('admin/wechat/car_base_info')}";
                }else if(res.code == 2){
                    alert(res.msg);
                }else if(res.code == 3){
                    alert(res.msg);
                }else{
                    alert(res.msg);
                }
            }
        });
    })
</script>

页面效果如下:

后端处理代码:

public function do_add_carpic()

    {
        $car_id = input("car_id");
        $files = request()->file('img');
        if($files){
            foreach($files as $file){
                // 移动到框架应用根目录/public/static/uploads/ 目录下
                $info = $file->validate(['size'=>3000000,'ext'=>'jpeg,jpg,png,gif'])->rule('date')->move(ROOT_PATH . 'public' . DS .'static'. DS .'uploads',true,false);
                if($info){
                    $res[] = json_encode($info->getSaveName());
                }else{
                    echo json_encode(['code'=>3,'msg'=>$file->getError()]);
                }
            }
            if(count($res) > 4){
                echo json_encode(['code'=>4,'msg'=>'最多上传4张图片']);
            }else{
                $imgstr['img'] = str_replace('"','', implode(';',$res));
                $imgstr['car_id'] = $car_id;
                $carimgs = Db::name("wxcar_img")->insert($imgstr);
                if($carimgs){
                    echo json_encode(['code'=>1,'msg'=>'上传成功']);
                }else{
                    echo json_encode(['code'=>2,'msg'=>'上传失败,请尽量一次性选中全部图片上传']);
                }
            }
        }else{
            echo json_encode(['code'=>0,'msg'=>'图片不可为空']);
        }
    }

至此,我自己写的图片上传就完成了额,

需要注意的是:当图片拖拽进入框内的时候,需要等待一两秒,等待图片全部append进入到同一个数组里面的时候,才能一次性全部提交成功,否则会出现图片重复,这算是一个小bug,后续等待改进。

转载于:https://my.oschina.net/zfblog/blog/1855260

你可能感兴趣的文章
C# 属性
查看>>
初识接口
查看>>
HICON与HBITMAP相互转换
查看>>
微信公众、QQ群、知识星球(附比特币链接)
查看>>
03.LoT.UI 前后台通用框架分解系列之——多样的表格
查看>>
高可用
查看>>
centos7 lvm实例
查看>>
分析python日志重复输出问题
查看>>
linux 信号处理
查看>>
Android--RecyclerView的封装使用
查看>>
Java对象和类
查看>>
驼峰命名法
查看>>
qsort
查看>>
206. Reverse Linked List
查看>>
设计模式之单例模式
查看>>
获取客户端ip地址
查看>>
sessionid如何产生?由谁产生?保存在哪里?
查看>>
oracle 监听服务异常
查看>>
网络流——最大流Dinic算法
查看>>
下面的div浮动上来了
查看>>