За последние 24 часа нас посетил 16631 программист и 1681 робот. Сейчас ищут 886 программистов ...

Усекается изображение при вставке в БД в поле mediumblob

Тема в разделе "MySQL", создана пользователем shurik_shink, 29 июн 2015.

  1. shurik_shink

    shurik_shink Новичок

    С нами с:
    17 май 2015
    Сообщения:
    79
    Симпатии:
    0
    При загрузке изображения в базу MySQL усекается изображение. То есть если после загрузки в базу выгрузить обратно средствами PhpMyAdmin то низ картинки будет обрезан. И в базе через PhpMyAdmin размер меньше чем оригинал.

    Подскажите кто знает или догадивается в чем дело.

    Ниже привожу SQL скрипт создания таблицы, HTML код для выбора изображения, PHP код для вставки изображения в базу.


    скрипт создания таблицы
    Код (PHP):
    1.  create table images(
    2.     image_id integer AUTO_INCREMENT PRIMARY KEY
    3.    ,filename varchar(200) not null
    4.    ,mime_type varchar(50) not null
    5.    ,file_size integer not null
    6.    ,image_data mediumblob not null
    7. ); 
    код HTML для выбора изображения
    Код (PHP):
    1. <form method="post" enctype="multipart/form-data">
    2. <input type="hidden" name="MAX_FILE_SIZE" value="10500000"/>
    3. аватар: <input type="file" name="user_pic" accept="image/jpeg" size="30"/>
    4. <input type="submit" name="to_reg" value="загрузить изображение">
    5. </form> 
    код PHP для вставки изображения в базу
    Код (PHP):
    1. <?php
    2.  
    3.   $error_code=isset($_FILES["user_pic"]["error"]) ? $_FILES["user_pic"]["error"]: -1;
    4.   if ($error_code == 0){
    5.     if (@is_uploaded_file($_FILES["user_pic"]["tmp_name"])){
    6.       if (@getimagesize($_FILES["user_pic"]["tmp_name"])){
    7.         $filename = $_FILES["user_pic"]["name"];
    8.         $mime_type = $_FILES["user_pic"]["type"];
    9.         $file_size = $_FILES["user_pic"]["size"];        
    10.         $image_data = file_get_contents($_FILES["user_pic"]["tmp_name"]);
    11.                          
    12.         $filename=mysql_real_escape_string($filename);
    13.         $mime_type=mysql_real_escape_string($mime_type);
    14.         $image_data=mysql_real_escape_string($image_data);
    15.         $query = "insert into images(filename, mime_type, file_size, image_data) ".
    16.                   "values('{$filename}', '{$mime_type}', {$file_size}, '".$image_data."');";
    17.                      
    18.         mysql_query($query)
    19.         or die("<p>Ошибка при вставке в таблицу images: ".mysql_error()."</p>");
    20.       }
    21.       else{//error_block
    22.         $error_code = -1;
    23.         $error_msg = "Ошибка: загруженный файл не является изображением";                
    24.       }
    25.     }
    26.     else{//error_block
    27.       $error_code = -1;
    28.       $error_msg = "Ошибка: файл был загружен не через HTTP POST";        
    29.     }
    30.     
    31.   }
    32.  ?>
    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Не храни изображение в базе.
     
  3. shurik_shink

    shurik_shink Новичок

    С нами с:
    17 май 2015
    Сообщения:
    79
    Симпатии:
    0
    Ошибка связана с какими то настройками моего локального сервера MySQL или PHP или Apache поскольку на хостинг сервере изображение загружается нормально.
    Буду очень признателен если кто-то подскажет какие настройки нужно подправить

    Добавлено спустя 2 минуты 49 секунд:
    Теперь наблюдается следующая ошибка, уже при попытке получить из базы и отобразить изображение (на хостинг сервере где изображение загружено полностью)
    http://os7866.co.ua/scripts/get_img.php?image_id=1

    При загрузке через FireFox выдает ошибку "Изображение 'http://os7866.co.ua/scripts/get_img.php?image_id=1' не может быть загружено так как содержит ошибки.

    При загрузке через google chrome просто вместо изображения отображается маленький квадратик
    Подскажите кто знает, с чем связана ошибка.

    Ниже привожу скрипт по загрузке картинки
    Код (Text):
    1. <?php
    2. require_once "../../param.php";
    3.  
    4. mysql_connect(DB_HOST, DB_USER, DB_PASSW) or
    5. die("<p>Ошибка подключения к серверу MySQL: ".mysql_error()."</p>");
    6.  
    7. mysql_select_db(DB_NAME) or
    8. die("<p>Ошибка подключения к базе данных: ".mysql_error()."</p>");
    9.  
    10. if (!isset($_REQUEST["image_id"])) die("<p>Ошибка: не указано image_id</p>");
    11. $image_id = $_REQUEST["image_id"];
    12.  
    13. $query = sprintf("select * from images where image_id = %d;", $image_id);
    14. $result = mysql_query($query);
    15. if (!$result) die("<p>Ошибка при выполнении запроса: ".mysql_error()."</p>");
    16. if (mysql_num_rows($result) == 0) die("<p>Отсутствует изображение с image_id = {$image_id}</p>");
    17. $image = mysql_fetch_array($result);
    18.  
    19.  
    20. header('Content-type: ' . $image['mime_type']);
    21. header('Content-length: ' . $image['file_size']);
    22. echo $image["image_data"];
    23. ?>
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Через fiddler сравни то что отдаёт твой браузер и то что отдаёт сервер если запросить изображение с диска