webleads-tracker

Forum

Documents en téléchargement

Damien Grimault
Bonjour à tous,
Quelqu'un pourrait-il me dire comment installer des fichiers (zip, pdf, avi...) en téléchargement sur une page ?
J'arrive a insérer des liens vers les fichiers du centre de ressources, mais quand on clique sur ces liens, les documents s'ouvrent dans la fenêtre au lieu de proposer de les enregistrer sur le DD du visiteur (sauf les zip). Ce n'est pas du tout l'effet recherché.
Y a t il une solution accessible à des clients lambda, c'est à dire sans aller tripatouiller le code html ?
Merci de votre aide.
Dag

Thomas Hesse
Bonjour,

Le comportement d'un lien quand on clique dessus dépend de la configuration du navigateur. Typiquement, si le navigateur possède des plug-ins permettant l'ouverture d'un certain type de fichier (PDF, vidéo...), il les ouvrira directement au lieu de les télécharger.

En d'autres termes, l'effet du clic dépend de chaque configuration, et on ne peut absolument pas forcer quoi que ce soit. La seule "solution" que je connaisse, disponible sur tous les navigateurs, c'est le "clic droit, sauvegarder sous...".
--
Thomas - Chargé de support et d'assistance

Julien Lafillé [37e Parallèle Multimédia]
Bonjour,

si je puis me permettre : confronté dans le passé à cette situation et ne pouvant me résoudre à la solution évoquée par Thomas, j'ai trouvé via Google un script PHP permettant de "forcer" le téléchargement de fichiers médias (JPG, PDF, ZIP, MP3...).
L'utilisation en était la suivante (en supposant que le script en question s'appelle dl.php) :
remplacer un lien du style
par

Par contre, je n'ai absolument pas testé ce script en environnement Emajine et ne fournit aucune garantie et aucun support quant à son utilisation.
Par ailleurs, je laisse à la discrétion de Medialibs le choix de le laisser publié ou pas.
Le voici donc :

$file_down = $_GET['file'];

function dl_file($file){

//First, see if the file exists
if (!is_file($file)) { die("404 File not found!" ); }

//Gather relevent info about file
$len = filesize($file);
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename,"." ),1));

//This will set the Content-Type to the appropriate setting for the file
switch( $file_extension ) {
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
case "mp3": $ctype="audio/mpeg"; break;
case "wav": $ctype="audio/x-wav"; break;
case "mpeg":
case "mpg":
case "mpe": $ctype="video/mpeg"; break;
case "mov": $ctype="video/quicktime"; break;
case "avi": $ctype="video/x-msvideo"; break;

//The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
case "php":
case "htm":
case "html":
case "txt": die("Cannot be used for ". $file_extension ." files!" ); break;

default: $ctype="application/force-download";
}

//Begin writing headers
header("Pragma: public" );
header("Expires: 0" );
header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
header("Cache-Control: public" );
header("Content-Description: File Transfer" );

//Use the switch-generated Content-Type
header("Content-Type: $ctype" );

//Force the download
$header="Content-Disposition: attachment; filename=".$filename.";";
header($header );
header("Content-Transfer-Encoding: binary" );
header("Content-Length: ".$len);
@readfile($file);
exit;
}

dl_file($file_down);
?>


Damien Grimault
Merci Julien...
Effectivement je travaille actuellement avec un CMS (non-open) qui propose cette option. Donc on peut bien forcer le navigateur à ouvrir ou proposer en téléchargement les documents liés.
Cela pourrait constituer une amélioration pour les prochaines versions d'e-majine...
Dag

Julien Lafillé [37e Parallèle Multimédia]
[Petit edit]
Désolé, je m'aperçois que j'ai oublié de mettre certaines parties de mon message précédent entre balises "codes".
Il fallait lire :

(...)L'utilisation en était la suivante (en supposant que le script en question s'appelle dl.php) :
remplacer un lien du style

par


Julien