Bonjour,

sur cette page, je mets à la disposition du visiteur une série de fichiers mp3 à télécharger.

J'aimerais simplifier au maximum le téléchargement, en fait j'aimerais qu'il soie possible de télécharger directement le fichier mp3 plutôt que de le mettre dans un fichier zip.

Évidemment, si je mets le lien du mp3, ce dernier ce charge dans une nouvelle fenêtre. Mais c'est pas ce qu'on veut ici.

Il doit bien exister une méthode pour "forcer" le téléchargement de fichier mp3 sans avoir à le zipper?
Modifié par juliesunset (28 Sep 2011 - 17:04)
Bonjour,

Si tu utilises php, tu peux faire un truc du genre :


/*******************************************************
  *  Déclaration de la fonction
  *******************************************************/
 
  /**
   *  La fonction force le téléchargement d'un fichier
   *
   * @author : Hugo HAMON
   * @param : string $nom nom du fichier
   * @param : string $situtation emplacement sur le serveur web
   * @param : integer $poids poids du fichier en octets
   * @return : void
   **/
  function forcerTelechargement($nom, $situation, $poids)
  {
    header('Content-Type: application/octet-stream');
    header('Content-Length: '. $poids);
    header('Content-disposition: attachment; filename='. $nom);
    header('Pragma: no-cache');
    header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    header('Expires: 0');
    readfile($situation);
    exit();
  }
 
  /*******************************************************
  *  Appel de la fonction
  *******************************************************/
  forcerTelechargement('compte.pdf', './documents/compte.pdf', 10000);


source : http://www.apprendre-php.com/tutoriels/tutoriel-25-forcer-le-telechargement-d-un-fichier.html

Edit : Code non testé, mais le principe est la au besoin tu trouveras ton bonheur avec google en cherchant "force download" Smiley smile )
Modifié par Belkira (28 Sep 2011 - 16:06)
Merci pour le lien! Smiley smile Je vais regarder ça.

Existe-t-il aussi une méthode avec javascript? Histoire de voir toutes les possibilités.
Pas que je sache en js ( mais je ne pense pas, js étant exécuté sur le micro client).

Mais après je citais Php car je le connais. Mais tu dois pouvoir le faire avec n'importe quel langage serveur.
Modifié par Belkira (28 Sep 2011 - 16:09)
OK, après coup, je me rend compte que js n'est pas du tout indiqué ici de toute façon.

Bon appart ça, le php je connait un peu, mais je galère.
La méthode que tu m'indique ne semble s'appliquer que pour un seul fichier. Hors, ici je dois en avoir une 30taine. alors j'ai fait quelque recherche, et j'ai trouvé un code qui pourrait fonctionner... si seulement j'y arrivait!

Voici ce que ça donne, mon fichier download.php
<?php
$file=$_GET['file'];

//telechargement
$taille=filesize("doc/$file");
header("Content-Type: application/force-download; name=\"$file\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $taille");
header("Content-Disposition: attachment; filename=\"$file\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
readfile("doc/$file");
exit();
?>


Dans mon html j'indique ça:
<a href="download.php?file=Alarm-1.mp3" class="bouton download">Télécharger</a>

Mais ça m'envoie un 404...
Mon fichier download.php est dans le même dossier que les fichier mp3.
Arf! boulet...

Bon en fait c'était un problème de chemin... que j'ai fini par trouver.

Mais là j'ai des message d'erreur:
a écrit :
Warning: filesize() [function.filesize]: stat failed for doc/Alarm-1_web.mp3 in /home/ggteleco/public_html/download/sound/mp3/download.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at /home/ggteleco/public_html/download/sound/mp3/download.php:5) in /home/ggteleco/public_html/download/sound/mp3/download.php on line 6

Warning: Cannot modify header information - headers already sent by (output started at /home/ggteleco/public_html/download/sound/mp3/download.php:5) in /home/ggteleco/public_html/download/sound/mp3/download.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at /home/ggteleco/public_html/download/sound/mp3/download.php:5) in /home/ggteleco/public_html/download/sound/mp3/download.php on line 8

Warning: Cannot modify header information - headers already sent by (output started at /home/ggteleco/public_html/download/sound/mp3/download.php:5) in /home/ggteleco/public_html/download/sound/mp3/download.php on line 9

Warning: Cannot modify header information - headers already sent by (output started at /home/ggteleco/public_html/download/sound/mp3/download.php:5) in /home/ggteleco/public_html/download/sound/mp3/download.php on line 10

Warning: Cannot modify header information - headers already sent by (output started at /home/ggteleco/public_html/download/sound/mp3/download.php:5) in /home/ggteleco/public_html/download/sound/mp3/download.php on line 11

Warning: Cannot modify header information - headers already sent by (output started at /home/ggteleco/public_html/download/sound/mp3/download.php:5) in /home/ggteleco/public_html/download/sound/mp3/download.php on line 12

Warning: readfile(doc/Alarm-1_web.mp3) [function.readfile]: failed to open stream: No such file or directory in /home/ggteleco/public_html/download/sound/mp3/download.php on line 13
Si tu as une 404 c'est que le chemin ( depuis ton lien) vers download.php est mauvais.


<a href="cheminDuRepertoireContenantTonScript/download.php?file=Alarm-1.mp3" class="bouton download">Télécharger</a>


Par contre si tu mets le script et tes mp3 au même niveau, ça ne fonctionnera pas en l'etat.

Mets plutot :
- download.php
- un repertoire nommé doc contenant tes mp3

Ou change les chemins dans ton script ( filesize, readfile).

edit : Oups, nos message se sont croisés, mais je réponds quand même au suivant Smiley smile
Modifié par Belkira (28 Sep 2011 - 16:39)
La tu as "juste" un problème de chemin.

En gros, les fonctions filesize() et readfile() te disent qu'elle ne trouve pas le fichier la ou il est indiqué.
Dans un premier temps, tu peux remplacer le chemin relatif placé en paramètre par un absolu. Et chercher le relatif à partir de la.

edit : je ne sais pas si je suis très clair. Peux-tu me donner ton architecture ( là où est le fichier download. php et ou sont tes mp3 en partant de la racine) ?
Modifié par Belkira (28 Sep 2011 - 16:55)
Le plus bizarre c'est que mes chemins semblent correct...

EDIT: AH! bon j'ai fini parle trouve le m*** chemin! J'ai rarement eu autant de difficulté avec ça!

Merci de ton aide! Smiley smile
Modifié par juliesunset (28 Sep 2011 - 17:04)