如何使用HTTP POSTselect并上传多个HTML和PHP文件?
我有使用<input type="file">
单个file upload的经验。 但是,我一次只能上传一个以上的文件,
例如,我希望能够select一系列图像,然后将它们一次上传到服务器。
如果可能的话,使用单个文件input控件将会很好。
有谁知道如何做到这一点? 谢谢!
这在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>
在文件对话框中select2个项目后,在Chrome中看起来如下所示:
点击“上传”button后,看起来如此。
这只是一个完整工作答案的草图。 请参阅PHP手册:处理文件上载 ,以获取有关在PHP中正确,安全地处理file upload的更多信息。
有几件事你需要做的创build一个多file upload,其实际上是非常基本的。 您不需要使用Java,Ajax,Flash。 只要build立一个正常的file upload表格,
<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的完整解决scheme:
<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>
如果您想从select浏览时显示的文件select器对话框中select多个文件,那么您大多运气不佳。 你将需要使用一个Java小程序或类似的东西(我认为有一个使用小型Flash文件,我会更新,如果我find它)。 目前单个文件input只允许select一个文件。
如果您正在讨论使用多个文件input,那么与使用多个文件input应该没有多大区别。 发布一些代码,我会尽力帮助进一步。
更新:有一种方法使用一个使用闪光灯的“浏览”button。 我从来没有亲自使用这个,但我已经读了相当多的。 我认为它是你最好的select。
在第一个你应该做这样的forms:
<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/>'; } ?>
这很容易…完成
如果您使用多个input字段,则可以设置name =“file []”(或任何其他名称)。 这将把他们放在一个数组,当你上传他们( $_FILES['file'] = array ({file_array},{file_array]..)
)
还有一个免费的Flash Based Uploader, Uploadify 。
Holger – Amidallasearch引擎
我已经创build了一个用于上传多个图像的PHP函数,这个函数可以上传多个图像在特定的文件夹,以及它可以保存在数据库中的logging在下面的代码$ arrayimage是通过forms注释图像的数组它不会允许上传使用多个,但你需要创build不同的input字段,同样的名字,你可以设置button点击文件input的dynamic添加字段。
$ 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类在这里结束
你可以尝试这个代码插入多个图像及其扩展名这个function是为检查图像文件创build的,你可以replace代码中的特定文件的扩展名列表
我有这个简单一点
<?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)); } ?>
部分答案:pear HTTP_UPLOAD可以用http://pear.php.net/manual/en/package.http.http-upload.examples.php
有多个文件的完整示例