2015-09-14 25 views
-1

我有一個問題,使用php從MYSQL下載Blob文件下載PHP文件的完整大小Mysql

這裏是我的PHP腳本在下載文件:

 $querysel = "Select * from file where file_id = '$fileid'"; 
     $resultsel = mysql_query($querysel); 
     $rowsel = mysql_fetch_array($resultsel); 

     $filename = $rowsel['file_name']; 
     $mimetype = $rowsel['mime_type']; 
     $filesize = $rowsel['file_size']; 

     header("Content-length: ".$filesize); 
     header("Content-type: ".$mimetype); 
     header("Content-disposition: attachment; filename=".$filename); 
     header("Content-Description: PHP Generated Data"); 
     header("Content-transfer-encoding: binary"); 
     echo $filename; 

而這個表中mysql的enter image description here

問題   [增訂]

  1. 什t似乎是這裏的問題是,在下載文件後,該特定文件的文件大小與mysql中保存的文件大小不匹配。我不知道爲什麼?

  2. 我也遇到這個小問題,我下載了Powerpoint並刪除它並重新下載後會自動保存下載並自動打開。這是正常的嗎?

例子:

與文件的大小6.8MB本來是要與6.8MB還下載了,但這裏發生的事情是,下載的文件的文件大小隻有25bytes的BLOB文件。爲什麼?

任何幫助將不勝感激。由於

+0

你爲什麼不試試這個? http://www.2my4edge.com/2013/07/file-download-coding-using-php-and-mysql.html –

+0

在file_content列上使用反序列化:http://php.net/manual/fr/function。 unserialize.php 經過檢查文件大小 – Fky

+3

我想你會發現「01液晶幻燈片1.pps」大約是25個字符。也許你想要返回文件,而不是文件名? – markdwhite

回答

2

在我看來,你想成爲呼應文件內容,而不是它的文件名

$querysel = "Select * from file where file_id = '$fileid'"; 
    $resultsel = mysql_query($querysel); 
    $rowsel = mysql_fetch_array($resultsel); 

    $filename = $rowsel['file_name']; 
    $mimetype = $rowsel['mime_type']; 
    $filesize = $rowsel['file_size']; 

    header("Content-length: ".$filesize); 
    header("Content-type: ".$mimetype); 
    header("Content-disposition: attachment; filename=".$filename); 
    header("Content-Description: PHP Generated Data"); 
    header("Content-transfer-encoding: binary"); 

    echo $rowsel['file_content'];   //<-- changed line 

當然,你可能仍然有一個問題,在較大的文件BLOB是沒有大到足以容納6.8兆克。請參閱@ Fred-ii-評論以獲取詳細信息,並鏈接到您需要檢查的所有相關信息。

即使一個LONGBLOB只有4,294,967,295個字節,也就是說有點超過4Gig,所以在存儲到一個LONGBLOB之前你可能需要做一些大小檢查。

最安全的建議是將實際的文件存儲在磁盤上,並只存儲數據庫中的文件名和路徑。