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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top