通过一次单击将多个映像上载到服务器的问题

时间:2017-07-27 05:39:20

标签: php ajax

我试图通过一次点击将多个图像上传到服务器。我没有在JavaScript控制台上收到任何错误,但没有图像上传到服务器。你能告诉我我做错了吗?

这是我的HTML标记

<form id="uploadimage" action="" method="post" enctype="multipart/form-data">
        <div class="row">
            <div class="col-xs-6 col-md-3 text-center">
                <a href="#" class="thumbnail ">
                    <div class="img-box">
                        <input type="file" class="file" name="image" />                            <img class="img img-responsive" />
                    </div>
                </a>
            </div>
            <div class="col-xs-6 col-md-3 text-center">
                <a href="#" class="thumbnail ">
                    <div class="img-box">
                        <input type="file" class="file" name="image" />
                        <img class="img img-responsive" />
                    </div>
                </a>
            </div>
        </div>
        <input type="submit" value="Upload" class="submit" />
</form>

js文件为:

 $("#uploadimage").on('submit', (function(e) {
     e.preventDefault();
     $.ajax({
         url: "loader.php",
         type: "POST",
         data: new FormData(this),
         contentType: false,
         cache: false,
         processData: false,
         success: function(data) {

         }
     });
 }));

和PHP(loader.php)为

<?php
if (isset($_FILES["file"]["type"])) {
    $validextensions = array(
        "jpeg",
        "jpg",
        "png"
    );
    $temporary       = explode(".", $_FILES["file"]["name"]);
    $file_extension  = end($temporary);
    if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/jpeg")) && ($_FILES["file"]["size"] < 100000) //Approx. 100kb files can be uploaded.
        && in_array($file_extension, $validextensions)) {
        if ($_FILES["file"]["error"] > 0) {
            echo "Return Code: " . $_FILES["file"]["error"] . "<br/><br/>";
        } else {
            if (file_exists("upload/" . $_FILES["file"]["name"])) {
                echo $_FILES["file"]["name"] . " <span id='invalid'><b>already exists.</b></span> ";
            } else {
                $sourcePath = $_FILES['file']['tmp_name']; // Storing source path of the file in a variable
                $targetPath = "upload/" . $_FILES['file']['name']; // Target path where file is to be stored
                move_uploaded_file($sourcePath, $targetPath); // Moving Uploaded file
                echo "<span id='success'>Image Uploaded Successfully...!!</span><br/>";
            }
        }
    } else {
        echo "<span id='invalid'>***Invalid file Size or Type***<span>";
    }
}
?>\

enter image description here

4 个答案:

答案 0 :(得分:1)

请参阅this 当你发送多个文件时,php接受它作为一个文件数组,但在你的代码中,你接受它们作为一个单独的文件。 另外,尝试将名称数组作为

<input type="file" name="images[]" id="images" multiple >

答案 1 :(得分:0)

  1. 在表单中,名称是输入的标识符。因此,您应该$_FILES["image"]来访问您的文件。
  2. 当表单具有多个具有相同名称的输入时,它必须是末尾的[]名称(至少在php中)。因此,请在html源代码中重命名image[]

答案 2 :(得分:0)

首先,您在控制器中接收的文件数组是错误的,

$temporary       = explode(".", $_FILES["file"]["name"]);

你需要拍摄图像而不是文件,因为你使用的表格文件输入名称是图像,

$temporary       = explode(".", $_FILES["image"]["name"]);

然后在你的HTML中,你可以像 thisisme_22 建议一样

<input type="file" name="images[]" id="images" multiple >

然后在你的动作php文件中你可以统计文件和使用for或foreach你可以获得单个文件并上传它,就像这样

$count = count($FILES['image']['name']);
for($i = 0 ; $i < $count ; $i++){
    $file = $FILES['image']['name'][$i];
}

我希望它有所帮助。

答案 3 :(得分:0)

检查此代码并根据需要进行更改

$arr =  array();
$arr = $_FILES['image']['name'];

    for($i = 0; $i < count($arr) ; $i++)
    {
            $file_name = $_FILES['image']['name'][$i];
            $file_size = $_FILES['image']['size'][$i];
            $file_tmp = $_FILES['image']['tmp_name'][$i];
            $file_type = $_FILES['image']['type'][$i];  

        $responce = move_uploaded_file($file_tmp, "orders/".$file_name);

    }