Renommer le fichier pdf à télécharger sur fly
Question
Vu: sont préfixés Tous les fichiers PDF téléchargés sur le serveur avec horodateurs. l'utilisateur peut télécharger plus tard à nouveau ces fichiers. Ces (laids) ne changeraient jamais les noms de fichiers à nouveau sur le serveur.
Question: Quand je donne la possibilité de télécharger le fichier PDF, le nom du fichier est moche et long. Comment puis-je changer ce nom à quelque chose de sensible, de sorte que lorsque l'utilisateur télécharge ce fichier, le nom n'a pas l'air bizarre?
Ai-je besoin de faire une copie, car renommer le fichier original est pas une option? Ne serait-il pas une charge supplémentaire pour chaque fichier téléchargeable? Il est évident que la suppression du fichier copié serait une étape supplémentaire?
Est-il possible de renommer le fichier une fois fichier est téléchargé complètement sur le côté client?
Qu'est-ce que vous les gars suggèrent?
La solution
Quelque chose comme ceci:
<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
?>
Autres conseils
Je avais besoin de faire cela pour un projet récent et a été un peu confus sur la façon de mettre en œuvre, mais pensé à elle peu de temps après avoir vu la réponse de Klaus. Pour élaborer davantage sur la réponse de Klaus:
1) Créez un fichier appelé, par exemple, "process.php". Modifier le code de Klaus pour qu'il accepte deux paramètres: le nom du fichier d'origine et le nouveau nom. Mon process.php ressemble à:
<?php
$file = $_GET['file'];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename='.$_GET['newFile']);
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
2) Créer un lien sur votre page orientée utilisateur qui pointe vers le script du processeur:
<a href="process.php?file=OriginalFile.pdf&newFile=MyRenamedFile.pdf">DOWNLOAD ME</a>
Vous devez définir le nom du fichier souhaité dans l'en-tête Content-Disposition
:
$name = 'desiredname.pdf';
header('Content-Disposition: attachment;filename="' . $name . '"');
Mais malheureusement, ce ne sera pas repris par un certain webbrowser développé par une équipe à Redmond. Si vous souhaitez obtenir de travailler dans ce navigateur aussi bien, alors vous devez ajouter le même nom que la dernière partie du chemin de la requête. Par exemple:. http://example.com/pdf/desiredname.pdf
Le nom du contenu fourni est défini dans les en-têtes HTTP. Regardez autour de la page PHP sur les en-têtes (aussi les commentaires) pour plus d'informations.
Je faisais quelque chose de semblable il y a un moment, au service des fichiers via php (dans mon cas, de ne pas les renommer, mais de vérifier que la personne qui les téléchargement est connecté et a été autorisé à voir ces fichiers). J'ai trouvé que les téléchargements PDF ne fonctionnent pas dans IE à moins que je aussi ajouté ces en-têtes:
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');
Je ne sais pas pourquoi. Expérimenter et voir ce qui se passe.