2009-12-01 9 views
5

Gegeben: Alle hochgeladenen PDF-Dateien auf dem Server sind mit Zeitstempeln versehen. Spätere Benutzer können diese Dateien erneut herunterladen. Diese (hässlichen) Dateinamen würden sich nie wieder auf dem Server ändern.Umbenennen der PDF-Datei, die zum Herunterladen heruntergeladen werden soll

Frage: Wenn ich die Option zum Download PDF-Datei geben, sieht der Name der Datei hässlich und lang. Wie kann ich diesen Namen in etwas Sinnvolles ändern, so dass der Name, wenn er diese Datei herunterlädt, nicht seltsam aussieht?

Muss ich eine Kopie erstellen, da das Umbenennen der Originaldatei keine Option ist? Wäre es nicht ein zusätzlicher Aufwand für jede herunterladbare Datei? Natürlich wäre das Löschen der kopierten Datei ein weiterer zusätzlicher Schritt?

Ist es möglich, die Datei umzubenennen, sobald die Datei vollständig vom Client heruntergeladen wurde?

Was schlagen Sie vor?

Antwort

10

Etwas wie folgt aus:

<?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'); 
?> 
+0

'Inhalt-Baumuster zur' Inhalt-Baumuster zur sollte obwohl. – jensgram

+0

@jensgram: Es ist nicht Groß-und Kleinschreibung. – BalusC

+0

@klausbyskov: Bitte beachten Sie den Kommentar von BalusC. nach ihm wird es nicht auf IE arbeiten? – understack

0

Der Dateiname des Inhalts serviert wird in den HTTP-Header definiert. Schauen Sie sich die (auch die Kommentare) für weitere Informationen.

1

Sie müssen die gewünschten Dateinamen in den Content-Disposition Header setzen:

$name = 'desiredname.pdf'; 
header('Content-Disposition: attachment;filename="' . $name . '"'); 

Aber leider wird dies nicht von einem Team in Redmond entwickelt von einem bestimmten Web-Browser abgeholt werden. Wenn Sie es auch in diesem Browser zum Laufen bringen wollen, müssen Sie den gleichen Dateinamen wie den letzten Teil des Anfragepfads anhängen. Zum Beispiel: http://example.com/pdf/desiredname.pdf.

+0

Ich denke, dass der Dateiname Parameter technisch nicht in Anführungszeichen sein sollte.Wenn der Name keine Leerzeichen oder lustigen Zeichen enthält, lassen Sie ihn in Anführungszeichen. – TRiG

+0

@BalusC: das war hilfreich wie http://stackoverflow.com/questions/698308/why-doesnt-content-disposition-header-work-in-ie-8 dieser. Vielen Dank. – understack

0

Ich habe vor einiger Zeit etwas Ähnliches gemacht, indem ich Dateien über PHP liefere (in meinem Fall nicht um sie umzubenennen, sondern um zu überprüfen, dass die Person, die sie heruntergeladen hat, angemeldet war und diese Dateien sehen durfte). Ich fand, dass pdf-Downloads in IE nicht funktionierten, es sei denn, ich fügte auch diese Überschriften hinzu:

Ich bin nicht sicher, warum. Experimentieren Sie und sehen Sie, was passiert.

6

Ich musste dies für ein neues Projekt tun und war ein wenig verwirrt, wie man es implementiert, aber ich fand es heraus, kurz nachdem ich Klaus 'Antwort gesehen hatte. Um die Antwort von Klaus weiter zu vertiefen:

1) Erstellen Sie eine Datei mit dem Namen "process.php". Ändern Sie den Code von Klaus so, dass er zwei Parameter akzeptiert: den ursprünglichen Dateinamen und den neuen Namen. Mein process.php wie folgt aussieht:

<?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) Erstellen Sie einen Link auf Ihrer Benutzer zugewandten Seite, die mit dem Prozessor Skript-Punkte:

<a href="process.php?file=OriginalFile.pdf&newFile=MyRenamedFile.pdf">DOWNLOAD ME</a> 
+0

Wenn meine Datei im "myFiles" -Verzeichnis abgelegt ist, wie kann ich den Pfad hier festlegen? Ich bin ein bisschen verwirrt. Kannst du mir erklären? –

+0

Ich habe das gefunden. Ich habe den Dateinamen als '$ file = 'myFiles/sample.pdf';'. Es funktioniert wie Charme ... Danke für den Code ... +1 –

Verwandte Themen