programing tip

HTTP POST를 사용하여 HTML 및 PHP로 여러 파일을 선택하고 업로드하려면 어떻게해야합니까?

itbloger 2020. 6. 18. 21:30
반응형

HTTP POST를 사용하여 HTML 및 PHP로 여러 파일을 선택하고 업로드하려면 어떻게해야합니까?


을 사용하여 단일 파일 업로드 로이 작업을 수행 한 경험이 <input type="file">있습니다. 그러나 한 번에 둘 이상을 업로드하는 데 문제가 있습니다.

예를 들어 일련의 이미지를 선택한 다음 한 번에 서버에 업로드하고 싶습니다.

가능하면 단일 파일 입력 컨트롤을 사용하는 것이 좋습니다.

누구든지 이것을 달성하는 방법을 알고 있습니까? 감사!


이것은 HTML5 에서 가능합니다 . 예 (PHP 5.4) :

<!doctype html>
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <form method="post" enctype="multipart/form-data">
            <input type="file" name="my_file[]" multiple>
            <input type="submit" value="Upload">
        </form>
        <?php
            if (isset($_FILES['my_file'])) {
                $myFile = $_FILES['my_file'];
                $fileCount = count($myFile["name"]);

                for ($i = 0; $i < $fileCount; $i++) {
                    ?>
                        <p>File #<?= $i+1 ?>:</p>
                        <p>
                            Name: <?= $myFile["name"][$i] ?><br>
                            Temporary file: <?= $myFile["tmp_name"][$i] ?><br>
                            Type: <?= $myFile["type"][$i] ?><br>
                            Size: <?= $myFile["size"][$i] ?><br>
                            Error: <?= $myFile["error"][$i] ?><br>
                        </p>
                    <?php
                }
            }
        ?>
    </body>
</html>

파일 대화 상자에서 2 개의 항목을 선택한 후 Chrome에서 다음과 같이 표시됩니다.

크롬 여러 파일 선택

"업로드"버튼을 클릭 한 후의 모습입니다.

PHP에 여러 파일 제출

이것은 완전히 작동하는 답변의 스케치 일뿐입니다. PHP에서 파일 업로드 를 올바르게 안전하게 처리하는 방법에 대한 자세한 내용 PHP 설명서 : 파일 업로드 처리를 참조하십시오 .


여러 파일 업로드를 작성하기 위해 수행해야 할 몇 가지 작업이 있습니다. 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 ()를 사용하여 선택된 파일 수를 계산할 수 있습니다. 행운을 빌어 요!


Firefox 5의 전체 솔루션 :

<html>
<head>
</head>
<body>
 <form name="uploader" id="uploader" action="multifile.php" method="POST" enctype="multipart/form-data" >
  <input id="infile" name="infile[]" type="file" onBlur="submit();" multiple="true" ></input> 
 </form>

<?php
echo "No. files uploaded : ".count($_FILES['infile']['name'])."<br>"; 


$uploadDir = "images/";
for ($i = 0; $i < count($_FILES['infile']['name']); $i++) {

 echo "File names : ".$_FILES['infile']['name'][$i]."<br>";
 $ext = substr(strrchr($_FILES['infile']['name'][$i], "."), 1); 

 // generate a random new file name to avoid name conflict
 $fPath = md5(rand() * time()) . ".$ext";

 echo "File paths : ".$_FILES['infile']['tmp_name'][$i]."<br>";
 $result = move_uploaded_file($_FILES['infile']['tmp_name'][$i], $uploadDir . $fPath);

 if (strlen($ext) > 0){
  echo "Uploaded ". $fPath ." succefully. <br>";
 }
}
echo "Upload complete.<br>";
?>

</body>
</html>

찾아보기를 선택할 때 표시되는 파일 선택기 대화 상자에서 여러 파일을 선택하려면 대부분 운이 좋지 않습니다. Java 애플릿 또는 이와 유사한 것을 사용해야합니다 (작은 플래시 파일을 사용하는 파일이 있다고 생각합니다. 찾으면 업데이트합니다). 현재 단일 파일 입력은 단일 파일 만 선택할 수 있습니다.

여러 파일 입력 사용에 대해 이야기하는 경우 하나를 사용하는 것과 크게 다르지 않습니다. 몇 가지 코드를 게시하면 더 도움을 드리겠습니다.


업데이트 : 플래시를 사용하는 단일 '찾아보기'버튼을 사용하는 한 가지 방법이 있습니다. 나는 이것을 개인적으로 사용한 적이 없지만 그것에 대해 상당한 금액을 읽었습니다. 나는 당신의 최고의 샷을 생각합니다.

http://swfupload.org/


처음에는 다음과 같이 양식을 작성해야합니다.

<form method="post" enctype="multipart/form-data" >
   <input type="file" name="file[]" multiple id="file"/>
   <input type="submit" name="ok"  />
</form> 

맞아 그거야 . 이제이 코드를 양식 코드 또는 원하는 페이지에 추가하십시오.

<?php
if(isset($_POST['ok']))
   foreach ($_FILES['file']['name'] as $filename) {
    echo $filename.'<br/>';
}
?>

it's easy... finish


If you use multiple input fields you can set name="file[]" (or any other name). That will put them in an array when you upload them ($_FILES['file'] = array ({file_array},{file_array]..))


<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>

Using FOR Loop

<?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}.";                               
      }                 

    }               
  }    
?>

Using FOREACH Loop

<?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}.";                               
      }                 

    }               
  }
?>

i have created a php function which is used to upload multiple images, this function can upload multiple images in specific folder as well it can saves the records into the database in the following code $arrayimage is the array of images which is sent through form note that it will not allow upload to use multiple but you need to create different input field with same name as will you can set dynamic add field of file unput on button click.

$dir is the directory in which you want to save the image $fields is the name of the field which you want to store in the database

database field must be in array formate example if you have database imagestore and fields name like id,name,address then you need to post data like

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

and then pass that field into function $fields

$table is the name of the table in which you want to store the data..

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 class ends here

you can try this code for inserting multiple images with its extension this function is created for checking image files you can replace the extension list for perticular files in the code


partial answer: pear HTTP_UPLOAD can be usefull http://pear.php.net/manual/en/package.http.http-upload.examples.php

there is a full example for multiple files

참고URL : https://stackoverflow.com/questions/1175347/how-can-i-select-and-upload-multiple-files-with-html-and-php-using-http-post

반응형