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

.NET을 사용하여 단일 파일 업로드로이 작업을 수행 한 경험이 <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 ()를 사용하여 선택한 파일 수를 계산할 수 있습니다. Goodluck widdit!


답변

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/>';
}
?>

간단 해 … 끝


답변

<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]..)).