使用MULTIPLE输入上传多个文件

时间:2019-02-20 23:33:01

标签: php html file-upload image-uploading

我正在构建一个电子邮件模板构建器,该构建器使我可以输入内容,然后填充到html电子邮件模板中。表单的一部分允许您添加新的部分。每个部分都有一个上传输入,允许用户向该部分添加缩略图。我正在努力弄清楚如何以单一形式发送来自多个输入的多个图像(而不仅仅是将单个输入设置为“多个”)。

这是HTML

<div class="row">
        <div id="example1" class="list-group col">
          <div class="list-group-item article">
            <h4>Article Heading:</h4>
            <input type="text" name="ArticleHeading[]" 
    placeholder="Type your heading" />
            <h4>Article Subheading:</h4>
            <input type="text" name="ArticleHeading[]" 
    placeholder="Type your subheading"/>
            <h4>Thumbnail Image:</h4>
            <input type="file" name="fileToUpload" 
   id="fileToUpload">
          </div>
        </div>
      </div>

这是PHP:

//IMAGE UPLOADING
    $target_dir = "uploads/";
    $target_file = $target_dir . 
    basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = 
    strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    // Check if image file is a actual image or fake image
    if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"] 
   ["tmp_name"]);
    if($check !== false) {
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
     }
     }
     // Check if file already exists
     if (file_exists($target_file)) {
     echo "Sorry, file already exists.";
     $uploadOk = 0;
     }
     // // Check file size
     // if ($_FILES["fileToUpload"]["size"] > 500000) {
     //     echo "Sorry, your file is too large.";
     //     $uploadOk = 0;
     // }
     // Allow certain file formats
     if($imageFileType != "jpg" && $imageFileType != "png" 
      && $imageFileType != "jpeg"
     && $imageFileType != "gif" ) {
     echo "Sorry, only JPG, JPEG, PNG & GIF files are 
     allowed.";
     $uploadOk = 0;
     }
     // Check if $uploadOk is set to 0 by an error
     if ($uploadOk == 0) {
     echo "Sorry, your file was not uploaded.";
     // if everything is ok, try to upload file
     } else {
     if (move_uploaded_file($_FILES["fileToUpload"] 
     ["tmp_name"], $target_file)) {
     } else {
         echo "Sorry, there was an error uploading your 
     file.";
     }
     }
     $thumbnailPath = "uploads/".$_FILES["fileToUpload"] 
     ["name"];
     //END IMAGE UPLOADING

我尝试命名文件输入名称=“ file []”,然后使用数组上载每个文件,但是每次都会出错。...不确定其他操作。

2 个答案:

答案 0 :(得分:0)

将attritube enctype="multipart/form-data"添加到表单中。

有关更多信息,请参见this thread

答案 1 :(得分:0)

通过将名称设置为图像数组,我意识到自己做对了。我需要创建一个for()循环,然后遍历该数组并将每个文件路径分配给另一个数组。然后,我将该数组中的每个值分配给一个标签。

这是HTML:

            <input type="file" name="upload[]" multiple="multiple">

这是PHP:

//$files = array_filter($_FILES['upload']['name']); //something like that to be used before processing files.
// Count # of uploaded files in array
$total = count($_FILES['upload']['name']);
echo $total."<br>";
$newArray = array();

// Loop through each file
for( $i=0 ; $i < $total ; $i++ ) {

  //Get the temp file path
  $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

  //Make sure we have a file path
  if ($tmpFilePath != ""){
    //Setup our new file path
    $newFilePath = "uploads/" . $_FILES['upload']['name'][$i];

    //Upload the file into the temp dir
    if(move_uploaded_file($tmpFilePath, $newFilePath)) {
      //Handle other code here

    }
  }
}