J'ai de l'expérience dans le téléchargement de fichiers uniques en utilisant <input type="file">
. Cependant, j'ai du mal à télécharger plus d'un fichier à la fois.
Par exemple, j'aimerais pouvoir sélectionner une série d'images, puis les télécharger simultanément sur le serveur.
Ce serait bien d'utiliser un seul contrôle de fichier, si possible.
Est ce que quelqu'un sait comment accomplir cela? Merci!
Ceci est possible dans HTML5 . Exemple (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>
Voici à quoi cela ressemble dans Chrome après avoir sélectionné 2 éléments dans la boîte de dialogue de fichier:
Et voici à quoi cela ressemble après avoir cliqué sur le bouton "Télécharger".
Ceci est juste un croquis d'une réponse pleinement opérationnelle. Voir Manuel PHP: Gestion des envois de fichiers pour plus d'informations sur la gestion correcte et sécurisée des envois de fichiers en PHP.
Il y a quelques choses que vous devez faire pour créer un téléchargement de plusieurs fichiers, c'est assez basique en fait. Vous n'avez pas besoin d'utiliser Java, Ajax, Flash. Il suffit de créer un formulaire de téléchargement de fichier normal commençant par:
<form enctype="multipart/form-data" action="post_upload.php" method="POST">
Ensuite, la clé du succès.
<input type="file" name="file[]" multiple />
n'oubliez pas ces crochets! Dans le post_upload.php, essayez ce qui suit:
<?php print_r($_FILES['file']['tmp_name']); ?>
Notez que vous obtenez un tableau avec les données tmp_name, ce qui signifie que vous pouvez accéder à chaque fichier avec une troisième paire de crochets avec l'exemple de fichier 'numéro':
$_FILES['file']['tmp_name'][0]
Vous pouvez utiliser php count () pour compter le nombre de fichiers sélectionnés. Goodluck Widdit!
Solution complète dans 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>
Si vous souhaitez sélectionner plusieurs fichiers à partir de la boîte de dialogue de sélection de fichier qui s'affiche lorsque vous sélectionnez Parcourir, vous n’avez généralement pas de chance. Vous devrez utiliser un applet Java ou quelque chose de similaire (je pense qu'il y en a un qui utilise un petit fichier flash, je le mettrai à jour si je le trouve). Actuellement, une entrée de fichier unique permet uniquement la sélection d'un fichier unique.
Si vous parlez d’utiliser plusieurs entrées de fichier, il ne devrait pas y avoir beaucoup de différence d’en utiliser une. Poster du code et je vais essayer d'aider plus loin.
Mise à jour: il existe une méthode pour utiliser un seul bouton 'parcourir' qui utilise le flash. Je n'ai jamais personnellement utilisé cela, mais j'ai lu pas mal de choses à ce sujet. Je pense que c'est votre meilleur coup.
dans le premier cas, vous devriez créer un formulaire comme ceci:
<form method="post" enctype="multipart/form-data" >
<input type="file" name="file[]" multiple id="file"/>
<input type="submit" name="ok" />
</form>
c'est vrai . ajoutez maintenant ce code sous votre code de formulaire ou sur la page de votre choix
<?php
if(isset($_POST['ok']))
foreach ($_FILES['file']['name'] as $filename) {
echo $filename.'<br/>';
}
?>
c'est facile ... fini
<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>
Utiliser 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}.";
}
}
}
?>
Utiliser 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}.";
}
}
}
?>
il y a encore un téléchargeur basé sur Flash qui est gratuit, ploadify .
Holger - moteur de recherche Amidalla
Si vous utilisez plusieurs champs de saisie, vous pouvez définir name = "fichier []" (ou tout autre nom). Cela les mettra dans un tableau lorsque vous les téléchargerez ($_FILES['file'] = array ({file_array},{file_array]..)
)
j'ai créé une fonction php qui est utilisée pour télécharger plusieurs images. Cette fonction permet de télécharger plusieurs images dans un dossier spécifique. Elle permet également d'enregistrer les enregistrements dans la base de données sous le code suivant: $ arrayimage est le tableau d'images envoyé via le formulaire qu'il n'autorise pas le téléchargement à utiliser plusieurs fichiers, mais que vous devez créer un champ de saisie différent portant le même nom, de même que vous pouvez définir le champ d'ajout dynamique de la sortie de fichier lors d'un clic de bouton.
$ dir est le répertoire dans lequel vous souhaitez enregistrer l'image $ champs est le nom du champ que vous souhaitez stocker dans la base de données
le champ de base de données doit être dans un exemple de formate de tableau si vous avez imagestore de base de données et nom de champs comme id
$fields=array("id"=$_POST['idfieldname'], "name"=$_POST['namefield'],"address"=$_POST['addressfield']);
puis passez ce champ dans les champs fonction $
$ table est le nom de la table dans laquelle vous voulez stocker les données.
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
}
// la classe imageFunctions se termine ici
vous pouvez essayer ce code pour insérer plusieurs images avec son extension cette fonction est créée pour vérifier les fichiers image vous pouvez remplacer la liste des extensions pour les fichiers spécifiques dans le code