2011-08-11 33 views
0

我讓用戶上傳一個文件,我在一個字段中存儲原始文件名的名稱,另一個文件的重命名名稱以避免重複和其他風險。因此,當我讓他們下載它時,我希望他們能夠以原始名稱下載它,但是當我們的服務器上的我想要使用重命名的版本時。你怎麼能有兩個文件名並使用它來提供它?

樣品:

$原有=用戶給出的文件

$改稱名稱=我們給文件

header('Content-type: application/octet-stream'); // concatenation 
    header("Content-disposition: attachment; filename=$original"); // double quotes 
    $filename="../../../../docs/doc/$renamed"; 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($filename)); 
    ob_clean(); 
    flush(); 
    readfile($renamed); // no quotes needed 

我想這樣做,但該名字,因爲原來的名字是存儲在數據庫中,實際的文件名是重命名的一個我怎麼能實現這個?

+0

將兩個名稱都存儲在數據庫中。在標題中發送原始名稱,從磁盤讀取重命名的名稱。 –

回答

5
header("Content-disposition: attachment; filename=" . urlencode($original)); 
readfile($renamed); 
+0

嘿,我用它,但是當我下載它說:無法打開文件。它可能已損壞或者Preview無法識別的文件格式。看到我的問題,我更新了我正在使用的。 – KPO

+1

呃,如果你要使用的文件名不同('$ filename'?),那麼你應該使用它。 –

+0

我不確定我關注。很困惑。 $ orignal是文件的原始名稱$ renamed是我們給出的新的新名稱。 – KPO

相關問題