动态更改下载的文件名

时间:2013-07-26 08:20:19

标签: php download

如何使用php动态更改下载的文件名?这个excel表是使用Javascript从HTML表转换而来的。现在我想在每次下载时动态更改文件名。我正在使用input类型按钮作为下载按钮。


  

编者注:   根据评论,这个问题可以改写如下。

我希望人们能够从服务器下载Excel表格。如何强制下载文件并根据月份设置文件名?当我下载文件时,它显示“download.xls”

No code provided

见评论:

3 个答案:

答案 0 :(得分:2)

你写

  

此excel表格是使用Javascript从HTML表格转换而来。

这意味着HTML表已经在客户端以EXCEL文件的形式提供。

如果是这种情况,则没有理由将转换后的EXCEL文件从客户端推送回服务器,这样客户端就可以再次从服务器下载它。这对无用的循环没有意义并浪费带宽。

换句话说:当EXCEL文件已经驻留在客户端的Javascript内存中时,您需要做的就是将您的(Javascript转换的)EXCEL文件存储到基于Javascript Math.random()之类的文件名。至于一种简单的文件保存方法,HTML5的文件保存功能(作为许多方法之一)可能会成为你最好的朋友。

想一想:如果你坐在家里的沙发上,你就开车上班,只是为了能够开车回家,从家里厨房的冰箱里取啤酒,对吗?是的,你只是待在家里,走进厨房去拿啤酒。 ;)

同样在这里:如果您将其转换为客户端,并且客户端将该文件存储在其计算机的内存中,请将其保存到他的磁盘上。不要强迫他上传整个文件,以便他可以下载...如上所述:Javascript的Math.random()使您可以生成一个随机数,您可以使用它来创建随机文件名。

修改

基于OP's question in comment

  

但是如何根据月份使用动态文件名保存这些下载的文件。

要根据月份创建文件名,您可以像这样使用Javascript的日期:

var now = new Date(); 
var month = now.getMonth();

如果您正在寻找有关如何存储客户端文件的提示,您可能需要深入研究:

如果你想在服务器端处理它并使用基于year-month-day的你自己的文件名将PHP推送到客户端,你可以这样:

<?php
$realname = './data.xls';
if (file_exists($realname )) 
{
    $randname = 'YourExcelFilename'.gmdate('Y-m-d').'.xls';
    header('Content-type: application/vnd.ms-excel'); 
    header('Content-Disposition: attachment; filename='.$randname);
    header('Content-Length: '.filesize($realname));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    ob_clean();
    flush();
    readfile($file);
}
exit();
?>

EDIT 2 :通过删除2个不必要的标题thanks to a comment by @Herbert来纠正上述示例)

如果您想要更多替代解决方案,可能需要检查the two questions I linked in my first comment的答案,因为您的问题是可能重复这些问题

答案 1 :(得分:2)

将生成的文件名应用于Content-Disposition标题。

header("Content-Disposition: attachment; filename=\"$random_filename\"");
header('Content-type: application/vnd.ms-excel');
readfile($actual_filename);

答案 2 :(得分:1)

您可以使用PHP的重命名功能http://php.net/manual/en/function.rename.php

重命名服务器上的文件