Как я могу выбрать и загрузить несколько файлов с помощью HTML и PHP, используя HTTP POST?

У меня есть опыт, делающий это при загрузке одного файла, используя <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> 

Вот как это выглядит в Chrome после выбора 2 элементов в диалоговом окне файла:

Выбор хромного файла

И вот как это выглядит после нажатия кнопки «Загрузить».

отправка нескольких файлов на 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-апплет или что-то подобное (я думаю, что есть тот, который использует небольшой флеш-файл, я обновлю, если найду его). В настоящее время один вход в файл допускает только выбор одного файла.

Если вы говорите об использовании нескольких входных файлов, не должно быть большой разницы в их использовании. Отправьте некоторый код, и я постараюсь помочь дальше.


Обновление. Существует один способ использования одной кнопки «просмотра», в которой используется flash. Я никогда лично не использовал это, но я прочитал об этом немало. Я думаю, что это ваш лучший выстрел.

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

это легко … закончить

Если вы используете несколько полей ввода, вы можете установить name = "file []" (или любое другое имя). Это поместит их в массив при их загрузке ( $_FILES['file'] = array ({file_array},{file_array]..) )

есть еще один Flash-Uploader, который является бесплатным, Uploadify .

Хольгер – поисковая система Amidalla

я создал функцию php, которая используется для загрузки нескольких изображений, эта функция может загружать несколько изображений в определенную папку, а также может сохранять записи в базе данных в следующем коде. $ arrayimage – это массив изображений, который отправляется через примечание формы что он не позволит загрузке использовать несколько, но вам нужно создать другое поле ввода с таким же именем, как вы можете установить динамическое поле добавления файла unput при нажатии кнопки.

$ dir – это каталог, в котором вы хотите сохранить изображение. $ fields – это имя поля, которое вы хотите сохранить в базе данных

поле базы данных должно быть в примере формы массива, если у вас есть образ базы данных и имена полей, такие как идентификатор, имя, адрес, тогда вам нужно опубликовать данные, подобные

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

а затем передать это поле в функцию $ fields

$ 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 заканчивается здесь

вы можете попробовать этот код для вставки нескольких изображений с расширением. Эта функция создана для проверки файлов изображений, которые вы можете заменить в списке расширений для суточных файлов в коде

У меня это немного проще

 <?php $image1=$_FILES["file"] ["name"][0]; $image2=$_FILES["file"] ["name"][1]; $image3=$_FILES["file"] ["name"][2]; $temp1=$_FILES["file"] ["tmp_name"][0]; $temp2=$_FILES["file"] ["tmp_name"][1]; $temp3=$_FILES["file"] ["tmp_name"][2]; $image4=$_FILES["file_ot"] ["name"][0]; $image5=$_FILES["file_ot"] ["name"][1]; $temp4=$_FILES["file_ot"] ["tmp_name"][0]; $temp5=$_FILES["file_ot"] ["tmp_name"][1]; $query="INSERT INTO `vendordata`( `details`, `phone`, `email`, `driverpic`, `licensepic`, `adharcardpic`, `pancard`, `policeverification`) VALUES ('$details','$phone','$email','$image1','$image2','$image3','$image4','$image5')"; move_uploaded_file($temp1,'uploads/'.$image1); move_uploaded_file($temp2,'uploads/'.$image2); move_uploaded_file($temp3,'uploads/'.$image3); move_uploaded_file($temp4,'uploads/'.$image4); move_uploaded_file($temp5,'uploads/'.$image5); $run=$db->query($query); if ($run) { echo "inserted"; } else { echo("Error description: " . mysqli_error($db)); } ?> 
 <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 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}."; } } } ?> 

Использование 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}."; } } } ?> 

частичный ответ: груша HTTP_UPLOAD может быть полезна http://pear.php.net/manual/en/package.http.http-upload.examples.php

есть полный пример для нескольких файлов