簡體   English   中英

php保存的文件下載異常

[英]php saved file downloads as not expected

我有帶有LONGBLOB列的MySQL表來保存文件(盡管我知道直接將文件保存在數據庫中不是一個好習慣。)保存效果很好! 總結(C:\\ ProgramData \\ MySQL \\ MySQL Server 5.7 \\ Data \\ dogsport)dogsport的大小已增加到保存的新文件。

我已經寫了下載腳本部分。 文件下載到計算機正常(在網頁上不顯示圖像)。

問題:雖然下載的文件應為4.83 MB,但僅顯示4個字節。 當我打開圖像時,圖像也未顯示(請參見屏幕截圖)

在此處輸入圖片說明

是什么原因?

@Andrew的更新代碼:

            $query = "SELECT Id,Name,Type,SizeMB FROM Upload"; // Good practice. Do not process much data here. leave Content field
        $result = mysqli_query ( $con, $query) or die ("Couldn't execute SELECT query: ". mysqli_error($con));
        $nrows = mysqli_num_rows($result);
        echo '<table>
                    <tr>
                        <td>Id</td>
                        <td>Name</td>
                        <td>Type</td>
                        <td>Size (MB)</td>
                    </tr>';
        $selfpg = $_SERVER['PHP_SELF'];
        while( $row = mysqli_fetch_assoc($result) ){
            extract($row);
            echo "<tr>
                        <td>$Id</td>
                        <td>$Name</td>
                        <td>$Type</td>
                        <td>$SizeMB</td>
                        <td> <a href='$selfpg?id=$Id'> Download </a> </td>
                  </tr>";       
        }
        echo '</table>';

        //----------------------------------------------------------------------
        if ( isset($_GET['id']) ){

            $result_id = "SELECT Content FROM Upload WHERE Id=". $_GET['id'];

            $row = mysqli_fetch_assoc($result_id);
            extract($row);
            $size_bytes = $SizeMB * 1024 * 1024;
            header("Content-Type: ". $Type);
            header("Content-Length: ". $size_bytes);
            header("Content-Disposition: attachment; filename= ". $Name);

            echo $Content;
        }
        else{
            echo "<br>No id received to download a file</br>";
        }

仍然有問題

更新!!! -請使用SQL下載我的代碼

http://s000.tinyupload.com/index.php?file_id=88155436688298142745

您的問題可能是由於此引起的

header("Content-Length: ". $SizeMB);

Content-Length標頭必須包含以字節為單位的大小,而不是兆字節。

另外, SELECT * FROM Upload這是一個壞習慣。 您的查詢將返回表中的所有字段,包括longblob列。 您不需要處理太多數據。 在腳本中,您僅使用IdNameTypeSizeMB ,因此僅選擇那些字段。 而是

mysqli_data_seek($result,0);

您可以執行第二個查詢:

SELECT Content FROM Upload WHERE Id = $Id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM