如何使用HTTP POST選擇並上傳多個HTML和PHP文件?


Answers

你需要做一些事情來創建一個多文件上傳,實際上它非常基本。 您不需要使用Java,Ajax,Flash。 只需建立一個正常的文件上傳表格,

<form enctype="multipart/form-data" action="post_upload.php" method="POST">

那麼成功的關鍵;

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

不要忘記那些括號! 在post_upload.php中,請嘗試以下操作:

<?php print_r($_FILES['file']['tmp_name']); ?>

注意你會得到一個帶有tmp_name數據的數組,這意味著你可以用第三對括號來訪問每個文件,例如文件'number':

$_FILES['file']['tmp_name'][0]

您可以使用php count()來計算所選文件的數量。 Goodluck widdit!

Question

我有經驗使用<input type="file">進行單個文件上傳。 但是,我一次只能上傳一個以上的文件時遇到問題。

例如,我希望能夠選擇一系列圖像,然後將它們一次上傳到服務器。

如果可能的話,使用單個文件輸入控件會很好。

有誰知道如何做到這一點? 謝謝!




我已經創建了一個用於上傳多個圖像的php函數,該函數可以在特定文件夾中上傳多個圖像,並且可以在以下代碼中將記錄保存到數據庫中$ arrayimage是通過form note發送的圖像數組它將不允許上傳使用多個,但您需要創建具有相同名稱的不同輸入字段,您可以在按鈕單擊時設置文件未輸入的動態添加字段。

$ dir是要保存圖像的目錄$ fields是要存儲在數據庫中的字段的名稱

數據庫字段必須在數組合成的例子中,如果你有數據庫圖像存儲和字段名稱如id,姓名,地址,那麼你需要發布數據像

$fields=array("id"=$_POST['idfieldname'], "name"=$_POST['namefield'],"address"=$_POST['addressfield']);

然後將該字段傳遞給函數$字段

$ table是要在其中存儲數據的表的名稱。

function multipleImageUpload($arrayimage,$dir,$fields,$table)
{
    //extracting extension of uploaded file
    $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $arrayimage["name"]);
    $extension = end($temp);

    //validating image
    if ((($arrayimage["type"] == "image/gif")
    || ($arrayimage["type"] == "image/jpeg")
    || ($arrayimage["type"] == "image/jpg")
    || ($arrayimage["type"] == "image/pjpeg")
    || ($arrayimage["type"] == "image/x-png")
    || ($arrayimage["type"] == "image/png"))

    //check image size

    && ($arrayimage["size"] < 20000000)

    //check iamge extension in above created extension array
    && in_array($extension, $allowedExts)) 
    {
        if ($arrayimage["error"] > 0) 
        {
            echo "Error: " . $arrayimage["error"] . "<br>";
        } 
        else 
        {
            echo "Upload: " . $arrayimage["name"] . "<br>";
            echo "Type: " . $arrayimage["type"] . "<br>";
            echo "Size: " . ($arrayimage["size"] / 1024) . " kB<br>";
            echo "Stored in: ".$arrayimage['tmp_name']."<br>";

            //check if file is exist in folder of not
            if (file_exists($dir."/".$arrayimage["name"])) 
            {
                echo $arrayimage['name'] . " already exists. ";
            } 
            else 
            {
                //extracting database fields and value
                foreach($fields as $key=>$val)
                {
                    $f[]=$key;
                    $v[]=$val;
                    $fi=implode(",",$f);
                    $value=implode("','",$v);
                }
                //dynamic sql for inserting data into any table
                $sql="INSERT INTO " . $table ."(".$fi.") VALUES ('".$value."')";
                //echo $sql;
                $imginsquery=mysql_query($sql);
                move_uploaded_file($arrayimage["tmp_name"],$dir."/".$arrayimage['name']);
                echo "<br> Stored in: " .$dir ."/ Folder <br>";

            }
        }
    } 
    //if file not match with extension
    else 
    {
        echo "Invalid file";
    }
}
//function imageUpload ends here
}

// imageFunctions類在這裡結束

您可以嘗試使用此代碼插入多個圖像及其擴展名此功能用於檢查圖像文件,您可以替換代碼中特定文件的擴展名列表




<form action="" method="POST" enctype="multipart/form-data">
  Select image to upload:
  <input type="file"   name="file[]" multiple/>
  <input type="submit" name="submit" value="Upload Image" />
</form>

使用FOR循環

<?php    
  $file_dir  = "uploads";    
  if (isset($_POST["submit"])) {

    for ($x = 0; $x < count($_FILES['file']['name']); $x++) {               

      $file_name   = $_FILES['file']['name'][$x];
      $file_tmp    = $_FILES['file']['tmp_name'][$x];

      /* location file save */
      $file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */

      if (move_uploaded_file($file_tmp, $file_target)) {                        
        echo "{$file_name} has been uploaded. <br />";                      
      } else {                      
        echo "Sorry, there was an error uploading {$file_name}.";                               
      }                 

    }               
  }    
?>

使用FOREACH循環

<?php
  $file_dir  = "uploads";    
  if (isset($_POST["submit"])) {

    foreach ($_FILES['file']['name'] as $key => $value) {                   

      $file_name   = $_FILES['file']['name'][$key];
      $file_tmp    = $_FILES['file']['tmp_name'][$key];

      /* location file save */
      $file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */

      if (move_uploaded_file($file_tmp, $file_target)) {                        
        echo "{$file_name} has been uploaded. <br />";                      
      } else {                      
        echo "Sorry, there was an error uploading {$file_name}.";                               
      }                 

    }               
  }
?>



如果您使用多個輸入字段,則可以設置name =“file []”(或任何其他名稱)。 當你上傳它們( $_FILES['file'] = array ({file_array},{file_array]..) )時,




如果您想從選擇瀏覽時顯示的文件選擇器對話框中選擇多個文件,那麼您大多運氣不佳。 您將需要使用Java applet或類似的東西(我認為有一個使用小型Flash文件,如果我找到它,我會更新)。 目前單個文件輸入只允許選擇單個文件。

如果您正在討論使用多個文件輸入,那麼使用它們應該沒有多大區別。 發布一些代碼,我會嘗試進一步幫助。

更新:有一種方法使用使用閃光燈的單個“瀏覽”按鈕。 我從來沒有親自使用過這個,但我已經閱讀了相當多的內容。 我認為它是你的最佳鏡頭。

http://swfupload.org/