thinkphp5 多圖片拖拽上傳,自己寫的,不足之處請指正~

話不多說,直接放代碼。

前端頁面:
    <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,後續等待改進。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章