2012-10-10 117 views
1

當我從網站上傳文件到我的服務器時,它工作正常。但是,當我嘗試下載文件時,每次都會損壞文件。如果我打開我的服務器上的文件管理器,我可以通過它下載文件,它們工作正常。我知道文件上傳好了,它似乎是下載過程中的錯誤。從PHP中損壞文件,上傳文件

這些文件保存在我的服務器上,服務器上的ID由它們的名稱命名,後面跟着它們的擴展名。該名稱從數據庫中檢索並在下載時使用。

id | userid | filename | extension | size 
1  2   test.jpeg  jpeg   123456 

//the extension column is just for testing, yes I know it's redundant 

test.jpeg將作爲1.jpeg保存在我的服務器上。

//this is the very first bit of code on the page aside from starting the session 
if(isset($_POST['downloadFile'])){ 
    $file = new fileprocessing; 
    $fileID = mysql_real_escape_string($_POST['hiddenFileDownload']); 
    $file->serveFile($fileID); 
} 

這裏是找到該文件,並允許serveFile功能,用戶可以下載它

function serveFile($fileID){ 
    $sql = mysql_query("select * from files where id = '$fileID'"); 
    $file = mysql_fetch_array($sql); 
    $ext = $file['extension']; 

    header('Content-type: image/x-generic'); //I'm trying jpegs only right now 

    header('Content-Disposition: attachment; filename="'.$file['filename'].".".$ext.'" '); 

    readfile('/home/.../public_html/user_files/'. $fileID.".".$ext.' '); 
} 

當文件被下載具有正確的名稱。我不確定這是怎麼回事。我沒有正確打開文件?

編輯 - 調整我的分機,我servefile功能

+1

爲什麼你的文字路徑裏有一個'... /'? – alex

+0

這是幾個文件夾深,只是爲了可讀性刪除它。 – user1104854

+0

@ user1104854你的文件中是否有任何隱形的空白字符?物料清單? –

回答

1

怪異,因爲這聲音,我曾與在過去的視聽名爲「.jpeg」的文件擴展名(我有一個網站,人們可以上傳問題產品圖像)。不過,可以將擴展名重命名爲「.jpg」,並且可以在不中斷的情況下查看相同的文件。您可以嘗試在上傳時將「.jpeg」擴展名重命名爲「.jpg」,然後查看下載/查看結果是否未更改。

+0

我用PNG試了一下,那個也損壞了。 – user1104854

+0

因爲你有擴展名,你能不能修改標題「content-type」爲「image/$ extension」 –

+0

我想通了。它沒有抓取正確的文件。我忘記了我刪除了「擴展名」一欄,所以我一直在尋找那些不在那裏的東西。感謝提示,如果你沒有提到它,我可能甚至不會想到那裏。 – user1104854