鍍金池/ 問答/PHP  HTML/ 前端用 append 製造多個 input與 base64,後端接每個 base

前端用 append 製造多個 input與 base64,後端接每個 base64,但都只有一張會被保存?

問題描述

前端

<div class="admin-upload-inline pointer">
        <input type="file" id="file1" name="icons[]" class="add-btn admin-upload" accept="image/jpeg, image/png, image/jpg">
        <img src="../images/30.png" id="pre1" class="admin-upload-review">
        <i class="material-icons upload_cover_icon admin-upload-icon-add">add_circle_outline</i>
      </div>

      <div class="addend-display">

      </div>
$('body').on('change', '.add-btn',function(e){
    e.preventDefault();

    var id = $('.admin-upload-inline').length + 1;
    var iconLayout = $('<div class="admin-upload-inline add-btn pointer" id="icon-layout-'+id+'">');
    var fileInput = $(
      '<input type="hidden" id="file'+id+'" name="icon[]" class="admin-upload" value="">'
    + '<img src="../images/30.png" id="pre'+id+'" class="admin-upload-review">');

      iconLayout.append(fileInput);
          iconLayout.append(removeBtn);
          $(".addend-display").append(iconLayout);

     var reader = new FileReader();
     reader.onload = function(e) {
       $('#pre' + id).attr('src', e.target.result);
       $('#file' + id).attr('value', e.target.result);
     }

     reader.readAsDataURL(this.files[0]);

後端

foreach ($_POST['icon'] as $value) {
      preg_match('/^(data:\s*image\/(\w+);base64,)/', $value, $result);
        $file_ext = '.'.$result[2];
        file_put_contents('../../images/product/'.md5().$file_ext, base64_decode(str_replace($result[1], '', $value)));
    }

問題:

怎麼都只會是最後一張圖被保存?
假設(shè)我上傳ABC圖好了
他永遠只會儲存到 C圖? (../../images/product/)
於是我試著印印看icon欄位,我發(fā)現(xiàn)我同時上傳ABC圖,直接印出 print_r($_POST['icon]) 好像他只會有一個base64的連結(jié)
怎麼會這樣?

回答
編輯回答
離殤

你可以直接打印 $_POST 看看

或者新增上傳控件的時候, 手動指定 name="icon[1]" 的下標(biāo)

2018年6月18日 20:51
編輯回答
墨沫

應(yīng)該是你表單提交的時候,本來就是只獲取了一個,你看一下network,提交了寫啥吧。

2018年2月12日 20:27