假设:所有服务器上上传PDF文件的前缀为时间戳。以后用户可以再次下载这些文件。这些(丑陋)的文件名将永远不会对服务器再次发生变化。

问:当我给下载PDF文件的选项,文件名长相丑陋而漫长。我怎样才能改变这个名字的东西明智的,这样,当用户下载该文件,名字看起来不奇怪?

我需要做一个拷贝,因为重命名原始文件是不是一种选择?那岂不是为每个下载的文件额外的开销?显然删除复制的文件将是另一个额外的步骤

是否有可能一旦文件完全在客户端下载到重命名文件?

你们有什么建议?

有帮助吗?

解决方案

像这样:

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

其他提示

我需要为最近的一个项目做到这一点,是关于如何实现有点困惑,但看到克劳斯的回答后琢磨出来不久。要在Klaus的响应进一步阐述:

1)创建一个名为,比方说, “process.php” 文件。修改克劳斯的代码,以便它接受两个参数:原文件名和新名称。我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>

您需要设置所需的文件名在Content-Disposition头:

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

但不幸的是,这将不会由雷蒙德团队开发的网页浏览器一定回升。如果你想获得它在该浏览器工作,以及,那么你就需要非常相同的文件名作为追加请求路径的最后一部分。例如:。http://example.com/pdf/desiredname.pdf

服务的内容的文件名中的HTTP标头中定义。看 PHP的头(也评论)页面各处以获得更多信息。

前一段时间我在做类似的东西,通过PHP提供文件服务(在我的情况,不重新命名他们,但检查的人下载他们在记录上,并让其看到这些文件)。我发现,下载PDF文件未在IE中工作,除非我还添加这些标头:

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

我不知道为什么。实验看看会发生什么。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top