TÉLÉCHARGEMENT( ET NON UPLOAD) DE PLUSIEURS FICHIER

Ce topic a été résolu
yvesroland

yvesroland Le 24 juin 2019 à 10:37 (Édité le 25 juin 2019 à 11:22)

Bonjour à tout les membres, excusez moi du dérangement 😊je voudrais faire un système de téléchargement multiple de fichier audio sur mon site. En effet, lorsque je clique sur mon bouton télécharger et que le téléchargement concerne un seul audio alors le téléchargement est automatiquement démarré mais lorsqu'il concerne un album (par exemple 5 audios) le téléchargement démarre et prend en compte que le premier fichier, les 4 autres ne sont pas prix en compte.
Pour info mon code est bien évidemment dans une boucle avec la taille du tableau tout ça. J'ai vraiment besoin d'aide, je livre le projet dans 1 semaines et c'est cette fonctionnalité qu'il me manque 🙏🙏🙏
yvesroland

yvesroland Le 24 juin 2019 à 10:40 (Édité le 24 juin 2019 à 10:44)

Code pour lancer le téléchargement:
   if (strtolower($_SESSION['page']) == "album") {
   $contentArray = explode('@@', $infoFile->contentFic());
   for ($i=0; $i<count($contentArray); $i++) {
      $file = "../images/albums/".$contentArray[$i];
      downloading($file);
   }
}
Fonction de telechargement: 

function downloading($fileDownload)
{
   header('Content-Description: File Transfer');
   header('Content-Type: application/octet-stream');
   header('Content-Disposition: attachment; filename=' . basename($fileDownload));
   header('Content-Transfer-Encoding: binary');
   header('Expires: 0');
   header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
   header('Pragma: public');
   header('Content-Length: ' . filesize($fileDownload));
   readfile($fileDownload);
}
Balatharas

Balatharas Le 24 juin 2019 à 20:57 (Édité le 24 juin 2019 à 20:59)

Salut, alors honnêtement j'ai aucune idée de pourquoi cela fais ça mais peut être que si tu mets direct les header dans la for au lieu de passer par une fonction ça marchera.
Sinon solution qui marchera forcément, lancer le téléchargement d'un zip au lieu de balancer tout les audios.
Cela permettra de lancer qu'un seul téléchargement, de regrouper l'album en un seul dossier et de régler ton problème.
D'ailleurs tu peux automatiser la création du .zip/.rar en php.
Je te laisse chercher la librairie tu devrais vite trouver
Ainsi tu peux créer par php une archive de, par exemple, tout ce qui se trouve dans un certain dossier. Ensuite tu récup le nom et le fais télécharger si l'utilisateur souhaite tout télécharger d'un coup 😀
yvesroland

yvesroland Le 25 juin 2019 à 09:22

Bonjour,
@Balatharas Merci beaucoup, en fait j'y avais pensé, je me suis dit que certains de mes utilisateurs ne connaissent pas d'outil pour décompresser 😜 donc pour faciliter je voulais leur envoyer les fichiers en clair. Mais je pense que je vais faire comme tu l'a dis, je vais les laisser se débrouiller pour décompresser😂😂😂😂
Balatharas

Balatharas Le 25 juin 2019 à 11:06

Je pense que c’est la meilleure solution car je ne comprend vraiment pas le problème. Sinon si tu veux bien m’envoyer le code complet je peux peut-être essayer de mon côté ?
yvesroland

yvesroland Le 25 juin 2019 à 11:21

Bon j'ai résolu mon problème avec la méthode d'archivage, je laisse le code ici au passage espérant que ça puisse aider quelqu'un.
$contentArray = explode('@@', $infoFile->contentFic());//Extraction des noms de mes différents fichiers à télécharger
$zip = new ZipArchive;//Creation d'une instance de la classe ZipArchive
$nameAlbum = "../userSpace/downLoading/".$infoFile->libFic().".zip"; //Récupération du chemin où sera créer l'archive
if ($zip->open($nameAlbum, ZipArchive::CREATE) === TRUE) {// création et ouverture de l'archive
   //Debut de la boucle for jusqu'a la taille de notre tableau. Contenant les noms de nos fichiers
   for ($i=0; $i<count($contentArray); $i++) {
      $file = "../lien/vers/".$contentArray[$i];//récupération du chemin d'accès du fichier a télécharger
      $zip->addFile($file);// ajout du fichier dans l'archive
   }
   $zip->close(); //Quand tout s'est bien passé on ferme le fichier zip
   downloading($nameAlbum); //Lancement du téléchargement à partir de ma fonction. LE code est plus haut
} else {
   return "echec"; // dans le cas où la création et l'ouverture de l'archive ont échoué alors on retourne echec
}
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte