FormData自定義上傳圖片


由於前段時間的項目中 涉及到圖紙的上傳 前端大神很隨意的扔給我一個頁面 讓我自己修修改改 找了好幾個素材站都沒有找到合適的上傳插件 最后不得已 用formdata 寫了一個 順便記錄下吧

html 代碼

<li>
    <label class="left">上傳產品圖片:</label>
    <div class="formlisttext" id="feedback">
      <a onClick="getElementById('inputfile').click()" class="addpic"><b>+</b><br />添加圖片</a>
      <input type="file" onchange=checkImgExt(this.value) multiple="multiple" name="image" id="inputfile" style="height:0;width:0;z-index: -1; position: absolute;left: 10px;top: 5px;"/>
      <small class="long">支持jpeg、jpg、gif、png等圖片格式,單張圖片最大不超過8M。</small>
   </div>
</li>

js 代碼

$("#inputfile").change(function(){
            //創建FormData對象
            var data = new FormData();
            //為FormData對象添加數據
            $.each($('#inputfile')[0].files, function(i, file) {
                data.append('upload_file'+i, file);
            });

            //發送數據
            $.ajax({
                url:'url',  //地址自己寫啊
                type:'POST',
                data:data,
                cache: false,
                contentType: false,        //不可缺參數
                processData: false,        //不可缺參數
                success:function(data){
                
                    data = $(data).html();

                    //第一個feedback數據直接append,其他的用before第1個( .eq(0).before() )放至最前面。
                    //data.replace(/&lt;/g,'<').replace(/&gt;/g,'>') 轉換html標簽,否則圖片無法顯示。
                    if($("#feedback").children('img').length == 0)
                        $("#feedback").prepend(data.replace(/&lt;/g,'<').replace(/&gt;/g,'>'));
                    else
                        $("#feedback").children('img').eq(0).before(data.replace(/&lt;/g,'<').replace(/&gt;/g,'>'));
                    $(".loading").hide();    //加載成功移除加載圖片
                },
                error:function(err){
//                    alert('上傳出錯');
//                    $(".loading").show();    //加載失敗移除加載圖片
                }
            });
        });

php 代碼

 1 function img(){
 2     $db = $GLOBALS['db'];
 3     $ecs = $GLOBALS['ecs'];
 4 
 5     $dir_base = DATA_DIR . '/product_img/' . date('Ymd') . '/';
 6     if (!file_exists($dir_base)) {
 7         if (!@mkdir($dir_base, 0755,true)) {
 8             return false;
 9         }
10     }
11     //沒有成功上傳文件,報錯並退出。
12      if(empty($_FILES)) {
13          echo "<textarea><img src='{$dir_base}error.jpg'/></textarea>";
14          exit(0);
15      }
16 
17      $output = "<textarea>";
18      $index = 0;        //$_FILES 以文件name為數組下標,不適用foreach($_FILES as $index=>$file)
19      foreach($_FILES as $file){
20          $upload_file_name = 'upload_file' . $index;        //對應index.html FomData中的文件命名
21          $fix = substr(strrchr($_FILES[$upload_file_name]['name'], '.'), 1);
22          $filename = base64_encode("product_img_62_48".date('YmdHis')."_".rand(1000,9999)).".".$fix;
23          $gb_filename = iconv('utf-8','gb2312',$filename);    //名字轉換成gb2312處理
24         //文件不存在才上傳
25         if(!file_exists($dir_base.$gb_filename)) {
26              $isMoved = false;  //默認
27              $MAXIMUM_FILESIZE = 8 * 1024 * 1024;     //文件大小限制    8M = 8 * 1024 * 1024 B;
28              $rEFileTypes = "/^\.(jpg|jpeg|gif|png){1}$/i";   //取文件后綴
29 
30              if ($_FILES[$upload_file_name]['size'] <= $MAXIMUM_FILESIZE && preg_match($rEFileTypes, strrchr($gb_filename, '.'))) {
32                 $isMoved = @move_uploaded_file ( $_FILES[$upload_file_name]['tmp_name'], $dir_base.$gb_filename);        //上傳文件
33              }
34          }else{
35                  $isMoved = true;    //已存在文件設置為上傳成功
36          }
37          if($isMoved){
38              $sql = 'INSERT INTO'.$ecs->table('goods_img').'(`img_path`) VALUES '."('$dir_base$filename')";
39              $db->query($sql);
40              $img_id = $db->insert_id();
41              //輸出圖片文件<img>標簽
42             //注:在一些系統src可能需要urlencode處理,發現圖片無法顯示,
43              //    請嘗試 urlencode($gb_filename) 或 urlencode($filename),不行請查看HTML中顯示的src並酌情解決。
44              $output .= "<div class='thumblist' id='imageDelete{$img_id}' >";
45              $output .= "<div class='thumboperate'>";
46 //             $output .= "<a href='' class='replace'></a>";
47              $output .= "<a href='' onclick='imgdelete({$img_id});return false;' class='delete'></a>";
48              $output .= "</div>";
49              $output .= "<input type='hidden' name='imagepath[]' value='{$img_id}'>";
50              $output .= "<img src='{$dir_base}{$filename}' title='{$filename}' alt='{$filename}' style='width: 62px;height: 48px;'/>";
51              $output .= "</div>";
52          }else {
53              $output .= "<div class='thumblist' >";
54              $output .= "<div class='thumboperate'>";
55 //             $output .= "<a href='' class='replace'></a>";
56              $output .= "<a href='' class='delete'></a>";
57              $output .= "</div>";
58              $output .= "<input type='hidden' name='imagepath[]' value='{$dir_base}{$filename}'>";
59              $output .= "<img src='{$dir_base}error.jpg' title='{$filename}' alt='{$filename}' style='width: 62px;height: 48px;'/>";
60              $output .= "</div>";
61          }
62 
63          $index++;
64     }
65 
66     echo $output."</textarea>";
67 }

由於本人比較懶,細節方面就不調了

驗證方法附上

 1 function checkImgExt(filename)
 2     {
 3         var flag = false; //狀態 "jpg","png","jpeg","gif"
 4         var arr = ["jpg","png","jpeg","gif"];
 5         //取出上傳文件的擴展名
 6         var index = filename.lastIndexOf(".");
 7         var ext = filename.substr(index+1).toLowerCase( );
 8         //循環比較
 9         for(var i=0;i<arr.length;i++)
10         {
11             if(ext == arr[i])
12             {
13                 flag = true; //一旦找到合適的,立即退出循環
14                 break;
15             }
16         }
17         //條件判斷
18         if(!flag)
19         {
20             alert('你上傳的圖片類型不正確');
21 //            $("#Model").val('');
22             return false;
23         }
24     };


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM