php сохраняет загруженные файлы, так как не ожидается

У меня есть таблица MySQL с столбцом LONGBLOB для сохранения файла (хотя я знаю, что сохранение файлов непосредственно в базе данных не является хорошей практикой.) Сохранение работает отлично! (C: \ ProgramData \ MySQL \ MySQL Server 5.7 \ Data \ dogsport) размер dogport увеличился до нового сохраненного файла.

Я написал часть сценария загрузки. Загрузка файлов на компьютер (не отображение изображения на веб-странице).

Проблема: Загруженный файл показывает только 4 байта, хотя он должен быть 4.83 МБ. Когда я открываю изображение, изображение также не отображается (см. Снимок экрана)

введите описание изображения здесь

Какова причина?

Обновленный код для @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 . Вам не нужно обрабатывать так много данных. В скрипте вы используете только Id , Name , Type и SizeMB , поэтому выбирайте только те поля. И вместо

 mysqli_data_seek($result,0); 

вы можете выполнить второй запрос:

 SELECT Content FROM Upload WHERE Id = $Id