2016-11-16 103 views
1

我想從數據庫中獲取jpg格式圖片的二進制數據,並使用下面的代碼爲其下載鏈接。
它運行在wamp服務器上,當下載完成時打開並且文件沒有損壞,並且顯示文件在數據庫中正確存儲,但是在真實服務器上不起作用並且下載鏈接已經建立,但是當下載完成時文件不打開。
我嘗試使用pdf文件,它可以在服務器和wampserver上運行。
在下面的代碼中,$ row被正確填充,我確信數據庫值沒有問題。
$ content是圖像的二進制值。
服務器需要特定設置嗎?爲什麼下載的圖像被損壞?

$sql = "SELECT * FROM files WHERE file_id= ? "; 
    $params = array((int)$_POST["btn_save_file"]); 
    $table = sqlsrv_query($conn, $sql, $params); 
    $row = sqlsrv_fetch_array($table, SQLSRV_FETCH_ASSOC); 
    $message=sqlsrv_errors(); 
    $content =$row["file_data"]; 
    $temp = tmpfile(); 
    fwrite($temp,$content); 
    $name="img".rand(1,1000).".jpg"; 
    $a=fstat ($temp); 
    header('Content-type: image/jpg'); 
    header('Content-Length: '.$a["size"]); 
    header("Content-Disposition: attachment; filename=".$name); 
    echo $content; 
    fclose($temp); 
+0

確保輸出緩衝被禁用(並且之前沒有發送任何內容)。檢查錯誤。 –

+0

@CharlotteDunois是的,它的工作,非常感謝你,但現在我的回答是在評論中,我不知道如何完成這個問題? –

+0

自己回答問題,然後將其標記爲解決方案(綠色勾號)。 :) –

回答

1

Charlotte Dunois發表評論的答案是我的解決方案(禁用輸出緩衝)。
在製作下載鏈接之前,我使用了「ob_end_clean()」,它工作正常。