Comment est le nom du fichier de téléchargement choisi et est-il un moyen de le changer?
-
23-08-2019 - |
Question
J'ai un lien vers un fichier pas sur mon serveur:
<a href="history.nasa.gov/monograph15b.pdf">NASA</a>
Je voudrais faire en sorte que lorsqu'un visiteur clique sur le lien pour télécharger, le nom qui pop-up pour le PDF serait NASA.pdf, et non monograph15b.pdf.
Est-ce possible dans toutes les langues?
La solution
Si vous n'allez pas héberger le fichier vous-même, vous pourrez peut-être lire le contenu du fichier, puis envoyer ces contenus directement dans le navigateur avec les en-têtes appropriés.
Notez que ce sera lent car vous serez re-télécharger le fichier de la NASA à chaque fois que l'exécution de votre page PHP.
<?php
$filename = "http://history.nasa.gov/monograph15b.pdf";
$outputfilename = "NASA.pdf";
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"" . basename($outputfilename) . "\";" );
header("Content-Transfer-Encoding: binary");
readfile("$filename");
?>
Cette approche exige également que PHP soit configuré de sorte que fopen () peut gérer la lecture d'un fichier sur HTTP.
Autres conseils
La seule façon de le faire est vraiment d'abord télécharger le fichier en question sur votre propre serveur, nommez-le comme vous le souhaitez, et servir ensuite de nouveau à vos utilisateurs finaux.
Regardez dans l'en-tête HTTP en-tête Content-Disposition, il vous permettra de spécifiez le nom du fichier.
Vous devez utiliser une technologie côté serveur comme ASP.NET. Où en vous mettez un bouton sur la page. Lorsque le bouton est cliqué, il exécutera les tâches suivantes.
1) Response.Clear ();.
.2) Response.AddHeader ( "Content-Disposition", "fixation; filename = Nasa.pdf");
.3) Response.ContentType = "application / octet-stream";
4) Response.WriteFile (context.Server.MapPath ( "history.nasa.gov/monograph15b.pdf")). // vous devez définir le chemin realtively pour votre application.