2013-07-26 83 views
1

如何動態更改使用php下載的文件名?這個Excel表格是使用Javascript從HTML表格轉換而來的。現在我想在每次下載時動態更改文件名。我正在使用一個input類型的按鈕作爲下載按鈕。動態更改下載的文件名


編者按:根據意見 ,如下這個問題可能會改寫。

我希望人們能夠從服務器下載Excel工作表。如何強制文件下載並根據月份設置文件的名稱?當我下載的文件就說明「 download.xls 」

No code provided

看評論:

+1

你用什麼代碼下載文件? – putvande

+0

另外,是否要更改服務器上文件的名稱或保持服務器上文件的名稱相同,但更改下載文件的名稱? – putvande

+1

雅我想保持在服務器上的文件的名稱相同 – rahul

回答

2

服務器上的文件,你寫

這個Excel片使用Javascript從HTML錶轉換。

這意味着HTML表格在客戶端已經可以作爲EXCEL文件使用。

如果是這樣的話,沒有理由將轉換後的EXCEL文件從客戶端推回到服務器,這樣客戶端就可以再次從服務器上下載它。這是沒有意義的,浪費無用循環的帶寬。換句話說:當EXCEL文件已經駐留在客戶端的Javascript內存中時,所有您需要做的就是根據Javascript的Math.random()將您的(Javascript轉換的)EXCEL文件存儲到文件名中。至於簡單的文件保存方法,諸如HTML5的文件保存功能(作爲多種方式之一)可能會成爲您最好的朋友。

想一想:如果你坐在家中的沙發上,你不會開車上班只是爲了能夠回家,從家裏的廚房裏取冰箱裏的啤酒,是嗎?對,你只要呆在家裏,走進廚房拿起啤酒。 ;)

同樣在這裏:如果您將其轉換爲客戶端,並且客戶端在他的計算機內存中有該文件,請讓他將其保存到他的磁盤上。不要強迫他上傳整個文件,以便他可以下載它......正如所說:Javascript的Math.random()使您能夠生成一個隨機數,您可以使用它隨機創建隨機文件名。

編輯基於OP's question in comment

但如何根據這些每月下載的文件保存與動態文件名。

要創建基於當月的文件名,你可以使用JavaScript的日期是這樣的:

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

如果你正在尋找的提示如何存儲你的文件的客戶端,你可能想潛入:

如果你想處理IT方面erver端和推向使用PHP與基於year-month-day自己的文件名客戶端的文件,你可以去這樣的:

<?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因爲你的問題是這些問題的一個潛在的重複

+0

但是如何根據月份用動態文件名保存這些下載的文件。 – rahul

+0

當我下載文件時顯示download.xls – rahul

+0

@rahul看到我的**編輯**。如果你的文件現在說'download.xls',你只需要使用你在我的EDIT示例中看到的'月'var來重命名它。 –

2

將生成的文件名應用於Content-Disposition標頭。

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