4

与えられた: サーバーにアップロードされたすべての pdf ファイルには、タイムスタンプがプレフィックスとして付けられます。後でユーザーはこれらのファイルを再度ダウンロードできます。これらの (醜い) ファイル名は、サーバー上で再び変更されることはありません。

質問: PDF ファイルをダウンロードするオプションを指定すると、ファイルの名前が見苦しく長く見えます。ユーザーがこのファイルをダウンロードしたときに名前が変に見えないように、この名前を適切な名前に変更するにはどうすればよいですか?

元のファイルの名前を変更することはできないため、コピーを作成する必要がありますか? ダウンロード可能なファイルごとに余分なオーバーヘッドが発生しませんか? 明らかに、コピーされたファイルを削除することは、別の余分なステップでしょうか?

ファイルがクライアント側で完全にダウンロードされたら、ファイルの名前を変更することはできますか?

あなたたちは何を提案しますか?

4

5 に答える 5

10

このようなもの:

<?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');
?> 
于 2009-12-01T15:12:36.203 に答える
6

最近のプロジェクトでこれを行う必要があり、実装方法について少し混乱しましたが、クラウスの回答を見てすぐにわかりました。クラウスの反応をさらに詳しく説明すると、次のようになります。

1) たとえば、「process.php」という名前のファイルを作成します。Klaus のコードを変更して、元のファイル名と新しい名前の 2 つのパラメーターを受け入れるようにします。私の process.php は次のようになります。

<?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) ユーザー向けページにプロセッサ スクリプトへのリンクを作成します。

<a href="process.php?file=OriginalFile.pdf&newFile=MyRenamedFile.pdf">DOWNLOAD ME</a>
于 2012-10-03T21:20:46.573 に答える
1

Content-Dispositionヘッダーに目的のファイル名を設定する必要があります。

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

残念ながら、これはレドモンドのチームによって開発された特定の Web ブラウザーでは検出されません。そのブラウザでも機能させたい場合は、リクエストパスの最後の部分とまったく同じファイル名を追加する必要があります。例: http://example.com/pdf/desiredname.pdf.

于 2009-12-01T15:14:13.237 に答える
0

提供されるコンテンツのファイル名は、HTTP ヘッダーで定義されます。詳細については、ヘッダー(コメントも含む)のPHP ページを参照してください。

于 2009-12-01T15:12:40.383 に答える
0

私は少し前に似たようなことをして、php を介してファイルを提供していました (私の場合、ファイルの名前を変更するのではなく、それらをダウンロードする人がログインしており、それらのファイルを表示できることを確認します)。これらのヘッダーも追加しない限り、IE で pdf のダウンロードが機能しないことがわかりました。

header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Transfer-Encoding: binary');

理由はわかりません。実験して、何が起こるか見てください。

于 2009-12-01T15:23:53.053 に答える