2017-04-14 104 views
1

我在java脚本中有一个数组,该数组有文件名和文件路径,现在我必须在php中分配该数组并上传该数组存储在哪个文件中,我可以吗请给我解决方案。如何在php中使用javascript数组上传多个图像

这是我的javascript

<script type="text/javascript"> 

    var arrImgNPath = []; 
    var arrUniqueIds = []; 

    function myFunction() { 

     var files = $('#filesID').prop("files"); 
     var names = $.map(files, function(val) { return val.name; }); 

     console.log(names); 
     console.log("N the final result is :"); 

     for (var i=0; i<arrImgNPath.length; i++){ 

      var dict = arrImgNPath[i]; 
      //$('#str').val(JSON.stringify(dict)); 

      console.log("obj value :",dict); 

     } 

    } 

    function removeImageDataFromArray(spanId){ 

     console.log("spanID--------------------------------------"+spanId); 

     arrImgNPath= arrImgNPath.filter(function(el) { return el.ID != spanId; }); 

     for (var i=0; i<arrImgNPath.length; i++){ 

      var dict = arrImgNPath[i]; 
      console.log("obj value :",dict); 

     } 

    } 

    function uniqId() { 

     while (1) { 

      var uid = Math.round(new Date().getTime() + (Math.random() * 100)); 

      var isPresent = false; 

      for(var i=0; i<arrUniqueIds.length; i++){ 
       var idFromArray = arrUniqueIds[i]; 
       if (uid == idFromArray){ 
        isPresent = true; 
       } 
      } 

      if (isPresent === false) { 
       return uid; 

      } 
     } 

    } 

    $(document).ready(function() { 
    if (window.File && window.FileList && window.FileReader) { 

    $("#filesID").on("change", function(e) { 
     var files = e.target.files, 
     filesLength = files.length; 


     //console.log(files); 

     var filePath = $(this).val(); 
      //console.log("fake pathddddddddddd"+filePath); 

     for (var i = 0; i < filesLength; i++) { 


     var tmppath = URL.createObjectURL(event.target.files[0]); 
     filePath =tmppath; 

     var f = files[i]; 

     var randomId = uniqId(); 

     var dict = {}; 


     dict.name = f.name; 
     dict.path = filePath; 
     dict.ID = randomId; 
     arrImgNPath[arrImgNPath.length] = dict; 

     var fileReader = new FileReader(); 


     fileReader.onload = (function(e) { 

      var file = e.target; 
      //console.log("bfsd dsf sdfdsfds"+e.target.result); 

     // console.log("adsfdsfsd fsdf sdfsdfsdfsdsdfd"+randomId); 


      $("<span id=\"" + randomId + "\" class=\"pip\" >" + 
      "<img class=\"imageThumb\" src=\"" + e.target.result + "\" title=\"" + file.name + "\"/>" + 
      "<br/><span class=\"remove\">Remove image</span>" + 
      "</span>").insertAfter("#filesID"); 

      $(".remove").click(function(){ 
      //$(this).find("span").attr("id", "myspan_"+i); 
      console.log("files id values :"+ $(this).parent(".pip").attr("id")); 
      removeImageDataFromArray($(this).parent(".pip").attr("id"));  
      $(this).parent(".pip").remove(); 
      }); 

     }); 

     fileReader.readAsDataURL(f); 
     } 
    }); 
    } else { 
    alert("Your browser doesn't support to File API"); 
    } 
}); 

    </script> 

字典是我的数组如何分配在PHP数组和上传文件, 你可以在控制台检查骑上值

php文件

<!DOCTYPE html> 

    <head> 
     <style> 
      input[type="file"] { 
    display: block; 
} 
.imageThumb { 
    max-height: 75px; 
    border: 2px solid; 
    padding: 1px; 
    cursor: pointer; 
} 
.pip { 
    display: inline-block; 
    margin: 10px 10px 0 0; 
} 
.remove { 
    display: block; 
    background: #444; 
    border: 1px solid black; 
    color: white; 
    text-align: center; 
    cursor: pointer; 
} 
.remove:hover { 
    background: white; 
    color: black; 
} 
     </style> 
    </head> 

    <body> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<div class="field" align="left"> 
<form method="post" enctype="multipart/form-data" > 
    <h3>Upload your images</h3> 
    <input type="file" id="filesID" name="files[]" size="150" multiple="multiple" > 

    <input type="submit" name="submit" > 
    <input type="button" onclick="myFunction()" value="clickMe"> 
</form> 
</div> 

无论何时单击clickMe按钮,您可以在控制台中检查文件名和文件路径,请帮助我

+0

哪里可以发送邮件发送到? – elpddev

+0

@elpddev先生没有形式,这是主要原因,我该怎么做呢? –

+0

可以通过为JS函数创建的每个span元素创建''来完成。然后通过'$ _POST ['yourName']'从另一个php文件获取值。但要做到这一点,我们必须知道你想先发送哪些值。目前有两个值ID和图像路径。你想把它们都寄给他们吗? –

回答

0

对不起,迟到的回报。我不是100%确定这是否是你想要的。但我反正:)。感谢@Ben_Lee和他的answer,我设法将启动封装在一个函数中。

var arrImgNPath = []; 
 
    var arrUniqueIds = []; 
 

 
    function myFunction() { 
 

 
     var files = $('#filesID').prop("files"); 
 
     var names = $.map(files, function(val) { return val.name; }); 
 

 
     console.log(names); 
 
     console.log("N the final result is :"); 
 

 
     for (var i=0; i<arrImgNPath.length; i++){ 
 

 
      var dict = arrImgNPath[i]; 
 
      //$('#str').val(JSON.stringify(dict)); 
 

 
      console.log("obj value :",dict); 
 

 
     } 
 

 
    } 
 

 
    function removeImageDataFromArray(spanId){ 
 

 
     console.log("spanID--------------------------------------"+spanId); 
 

 
     arrImgNPath= arrImgNPath.filter(function(el) { return el.ID != spanId; }); 
 

 
     for (var i=0; i<arrImgNPath.length; i++){ 
 

 
      var dict = arrImgNPath[i]; 
 
      console.log("obj value :",dict); 
 

 
     } 
 

 
    } 
 

 
    function uniqId() { 
 

 
     while (1) { 
 

 
      var uid = Math.round(new Date().getTime() + (Math.random() * 100)); 
 

 
      var isPresent = false; 
 

 
      for(var i=0; i<arrUniqueIds.length; i++){ 
 
       var idFromArray = arrUniqueIds[i]; 
 
       if (uid == idFromArray){ 
 
        isPresent = true; 
 
       } 
 
      } 
 

 
      if (isPresent === false) { 
 
       return uid; 
 

 
      } 
 
     } 
 

 
    } 
 
    function initiateFiles(file) { 
 

 

 
     var tmppath = URL.createObjectURL(event.target.files[0]); 
 
     filePath =tmppath; 
 

 
     var f = file; 
 

 
     var randomId = uniqId(); 
 

 
     var dict = {}; 
 

 

 
     dict.name = f.name; 
 
     dict.path = filePath; 
 
     dict.ID = randomId; 
 
     arrImgNPath[arrImgNPath.length] = dict; 
 

 
     var fileReader = new FileReader(); 
 

 

 
     fileReader.onload = (function(e) { 
 

 
      //var file = e.target; 
 
      //console.log("bfsd dsf sdfdsfds"+e.target.result); 
 

 
     // console.log("adsfdsfsd fsdf sdfsdfsdfsdsdfd"+randomId); 
 

 

 
     $("<span id=\"" + randomId + "\" class=\"pip\" >" + 
 
      "<img class=\"imageThumb\" src=\"" + e.target.result + "\" title=\"" + file.name + "\"/>" + 
 
      "<br/><span class=\"remove\">Remove image</span>" + 
 
      "</span>").insertAfter("#filesID"); 
 

 
     $(".remove").click(function(){ 
 
      //$(this).find("span").attr("id", "myspan_"+i); 
 
      console.log("files id values :"+ $(this).parent(".pip").attr("id")); 
 
      removeImageDataFromArray($(this).parent(".pip").attr("id"));  
 
      $(this).parent(".pip").remove(); 
 
     }); 
 

 
    }); 
 

 
     fileReader.readAsDataURL(f); 
 
    } 
 

 
    $(document).ready(function() { 
 
     if (window.File && window.FileList && window.FileReader) { 
 

 
     $("#filesID").on("change", function(e) { 
 
      var files = e.target.files, 
 
      filesLength = files.length; 
 

 

 

 
      var filePath = $(this).val(); 
 
      for (var i = 0; i < filesLength; i++) { 
 
      initiateFiles(files[i]); 
 
     } 
 
     console.log(arrImgNPath); 
 
     var myJSON = JSON.stringify(arrImgNPath); 
 
     
 
     $("<input value=\'" + myJSON + "\' name=\"myJSON\" type=\"hidden\" />").insertAfter("#filesID"); 
 
    }); 
 
    } else { 
 
     alert("Your browser doesn't support to File API"); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="field" align="left"> 
 
<form method="post" action="yourOther.php" enctype="multipart/form-data" > 
 
    <h3>Upload your images</h3> 
 
    <input type="file" id="filesID" name="files[]" size="150" multiple="multiple" > 
 
    <input type="submit" name="submit" > 
 
    <input type="button" onclick="myFunction()" value="clickMe"> 
 
</form> 
 
</div>

这里我创建了一个隐藏的输入,其存储阵列。

$("<input value=\'" + myJSON + "\' name=\"myJSON\" type=\"hidden\" />").insertAfter("#filesID"); 

然后分配一个动作给表单发送数据到另一个php文件。

<form method="post" action="yourOther.php" enctype="multipart/form-data" > 

,现在是时候来获取数据和过程:

<?php 
$data = json_decode($_POST['myJSON']); 

foreach ($data as $key => $value) { 
    echo " Name : $value->name <hr>"; 
    echo " Path : $value->path <hr>"; 
    echo " ID : $value->ID <hr>"; 
} 
?> 

我希望这可以帮助,如果您还有其他疑问,请不要犹豫,问。