Hình ảnh được lưu trữ trong MySQL như thế nào?

Số lượng hình ảnh trong các ứng dụng web đã tăng đều đặn trong những năm gần đây. Cũng cần phải phân biệt giữa các hình ảnh có kích thước khác nhau, như hình thu nhỏ, hình ảnh hiển thị trên web và những thứ tương tự. Ví dụ: một ứng dụng mà tôi đã phát triển gần đây hiển thị các mục tin tức trong đó mỗi mục có hình thu nhỏ và hình ảnh bài viết chính. Một ứng dụng khác hiển thị logo công ty ở kích thước nhỏ và lớn

Hầu hết thời gian, hình ảnh có thể được lưu trữ trên máy chủ web và sau đó được tham chiếu bằng URL. Điều đó chỉ yêu cầu lưu trữ chuỗi đường dẫn trong cơ sở dữ liệu chứ không phải chính hình ảnh. Tuy nhiên, đôi khi điều này không khả thi, chẳng hạn như ứng dụng không có đủ quyền trên hệ thống tệp. Trong những trường hợp đó, bạn có thể lưu trữ hình ảnh trực tiếp trong cơ sở dữ liệu và sau đó tải chúng bằng mã ứng dụng

Các công cụ quản trị và phát triển Navicat hỗ trợ tuyệt vời cho việc quản lý hình ảnh. Trong blog hôm nay, chúng ta sẽ tìm hiểu cách Navicat làm cho việc lưu trữ hình ảnh trở thành một quy trình đơn giản. Với mục đích trình diễn, tôi sẽ sử dụng cơ sở dữ liệu MySQL 8, nhưng quy trình tương tự cũng sẽ áp dụng cho các cơ sở dữ liệu quan hệ khác

Trong MySQL, kiểu dữ liệu ưa thích để lưu trữ hình ảnh là BLOB. Tuy nhiên, thực sự có ba hương vị của BLOB. Cái bạn chọn tùy thuộc vào kích thước của hình ảnh mà bạn sẽ lưu trữ. Nếu nghi ngờ, hãy chuyển sang BLOB dung lượng lớn hơn. Đây là ba loại BLOB

  • BÃI. Có thể xử lý tới 65.535 byte dữ liệu
  • VỪABLOB. Độ dài tối đa được hỗ trợ là 16.777.215 byte
  • LONGBLOB. Lưu trữ tới 4.294.967.295 byte dữ liệu

Với ý nghĩ đó, đây là một định nghĩa bảng rất phù hợp với hình ảnh thu nhỏ, nhưng không lớn hơn nhiều

Bên cạnh hình ảnh, bạn có thể thấy hữu ích khi lưu trữ thông tin khác về hình ảnh, chẳng hạn như ID, tên, mô tả, kích thước, loại [JPEG, GIF, BITMAP, v.v. ], danh mục, v.v.

Sử dụng Navicat, không cần viết mã SQL để tải hình ảnh. Thay vào đó, bạn có thể sử dụng Trình duyệt tệp tiêu chuẩn để định vị và chèn tệp hình ảnh

Bất cứ khi nào bạn xem nội dung bảng trong chế độ xem Lưới biểu mẫu, bạn có thể chọn cách bạn muốn Navicat xử lý dữ liệu từ trình đơn thả xuống kiểu dữ liệu

Chọn Hình ảnh từ trình đơn thả xuống sẽ thêm ngăn xem trước hình ảnh bên dưới nội dung bảng/hàng

Ở bên trái của bản xem trước tệp, bạn sẽ tìm thấy ba biểu tượng. Tải, lưu vào đĩa và xóa. Để tải một hình ảnh, chỉ cần nhấp vào biểu tượng Tải và chọn hình ảnh bằng hộp thoại Trình duyệt tệp tiêu chuẩn của hệ điều hành. Sau khi được chèn, hình ảnh - cũng như kích thước tính bằng byte - sẽ xuất hiện trong khung xem trước

Lưu ý rằng hình ảnh trên yêu cầu MEDIUMBLOB vì kích thước của nó vượt quá 65.535 byte

Trong blog hôm nay, chúng ta đã học cách lưu trữ hình ảnh trong cơ sở dữ liệu MySQL 8 bằng cách sử dụng

Bây giờ là thời điểm hoàn hảo để mua Navicat Premium khi bổ sung hơn 100 cải tiến và bao gồm một số tính năng mới để cung cấp cho bạn nhiều cách hơn bao giờ hết để xây dựng, quản lý và duy trì cơ sở dữ liệu của bạn

Nói chung, khi chúng tôi tải lên tệp hình ảnh bằng PHP, hình ảnh đã tải lên được lưu trữ trong một thư mục của máy chủ và tên hình ảnh tương ứng được lưu trữ trong cơ sở dữ liệu. Tại thời điểm hiển thị, tệp được lấy từ máy chủ và hình ảnh được hiển thị trên trang web. Tuy nhiên, nếu bạn không muốn chiếm dung lượng của máy chủ, tệp chỉ có thể được lưu trữ trong cơ sở dữ liệu. Bạn có thể tải lên một hình ảnh mà không cần lưu trữ tệp trên máy chủ bằng cơ sở dữ liệu MySQL. Thật dễ dàng để lưu trữ và truy xuất hình ảnh từ cơ sở dữ liệu bằng PHP và MySQL

Nếu bạn lo lắng về dung lượng máy chủ và cần dung lượng trống trên máy chủ của mình, bạn có thể chèn tệp hình ảnh trực tiếp vào cơ sở dữ liệu mà không cần tải nó lên thư mục của máy chủ. Quy trình này giúp tối ưu hóa không gian máy chủ vì nội dung tệp hình ảnh được lưu trữ trong cơ sở dữ liệu chứ không phải máy chủ. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách lưu trữ các tệp hình ảnh vào cơ sở dữ liệu MySQL và truy xuất hình ảnh từ cơ sở dữ liệu bằng PHP

Trước khi bắt đầu tích hợp tệp tải lên với cơ sở dữ liệu, hãy xem cấu trúc tệp

store_retrieve_image_from_database/
├── dbConfig.php
├── index.php
├── upload.php
├── view.php
└── css/
    └── style.css

Chèn tệp hình ảnh trong MySQL

MySQL có kiểu dữ liệu BLOB [đối tượng lớn nhị phân] có thể chứa một lượng lớn dữ liệu nhị phân. Kiểu dữ liệu BLOB là hoàn hảo để lưu trữ dữ liệu hình ảnh trong cơ sở dữ liệu. Trong MySQL, có sẵn bốn loại BLOB – TINYBLOB, BLOB, MEDIUMBLOB và LONGBLOB. Kiểu dữ liệu LONGBLOB là hoàn hảo để lưu trữ dữ liệu tệp hình ảnh

Tạo bảng cơ sở dữ liệu

Để lưu trữ nội dung tệp, cần có một bảng trong cơ sở dữ liệu. SQL sau đây tạo một bảng images với trường kiểu dữ liệu LONGBLOB trong cơ sở dữ liệu MySQL

CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Cấu hình cơ sở dữ liệu [dbConfig. php]

Tệp dbConfig.php được sử dụng để kết nối và chọn cơ sở dữ liệu. Chỉ định máy chủ cơ sở dữ liệu [$dbHost], tên người dùng [$dbUsername], mật khẩu [

CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
0] và tên [
CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1] theo thông tin đăng nhập cơ sở dữ liệu MySQL của bạn

// Database configuration
$dbHost     = "localhost";
$dbUsername = "root";
$dbPassword = "root";
$dbName     = "codexworld";

// Create database connection
$db = new mysqli[$dbHost, $dbUsername, $dbPassword, $dbName];

// Check connection
if [$db->connect_error] {
    die["Connection failed: " . $db->connect_error];
}

Biểu mẫu tải lên hình ảnh

Tạo biểu mẫu HTML có trường nhập tệp để chọn tệp hình ảnh để tải lên. Hãy đảm bảo rằng

thẻ chứa các thuộc tính sau
  • phương pháp = "đăng"
  • enctype="multipart/form-data"
    Select Image File:
    
    

Lưu trữ tệp hình ảnh trong cơ sở dữ liệu [tải lên. php]

Tệp

CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
2 xử lý quá trình tải lên hình ảnh và chèn cơ sở dữ liệu

  • Kiểm tra xem người dùng có chọn tệp hình ảnh để tải lên không
  • Truy xuất nội dung của tệp hình ảnh theo tên tmp_name bằng hàm PHP file_get_contents[]
  • Chèn nội dung nhị phân của hình ảnh vào cơ sở dữ liệu bằng PHP và MySQL
  • Hiển thị trạng thái tải lên hình ảnh cho người dùng
// Include the database configuration file
require_once 'dbConfig.php';

// If file upload form is submitted
$status = $statusMsg = '';
if[isset[$_POST["submit"]]]{
    $status = 'error';
    if[!empty[$_FILES["image"]["name"]]] {
        // Get file info
        $fileName = basename[$_FILES["image"]["name"]];
        $fileType = pathinfo[$fileName, PATHINFO_EXTENSION];

        // Allow certain file formats
        $allowTypes = array['jpg','png','jpeg','gif'];
        if[in_array[$fileType, $allowTypes]]{
            $image = $_FILES['image']['tmp_name'];
            $imgContent = addslashes[file_get_contents[$image]];

            // Insert image content into database
            $insert = $db->query["INSERT into images [image, created] VALUES ['$imgContent', NOW[]]"];

            if[$insert]{
                $status = 'success';
                $statusMsg = "File uploaded successfully.";
            }else{
                $statusMsg = "File upload failed, please try again.";
            }
        }else{
            $statusMsg = 'Sorry, only JPG, JPEG, PNG, & GIF files are allowed to upload.';
        }
    }else{
        $statusMsg = 'Please select an image file to upload.';
    }
}

// Display status message
echo $statusMsg;
?>

Truy xuất hình ảnh từ cơ sở dữ liệu [xem. php]

Trong tệp

CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
3, chúng tôi sẽ lấy nội dung hình ảnh từ cơ sở dữ liệu MySQL và liệt kê chúng trên trang web

  • Các tham số dữ liệu, bộ ký tự và base64 trong thuộc tính src, được sử dụng để hiển thị hình ảnh BLOB từ cơ sở dữ liệu MySQL
// Include the database configuration file
require_once 'dbConfig.php';

// Get image data from database
$result = $db->query["SELECT image FROM images ORDER BY id DESC"];
?> num_rows > 0]{ ?>
    


        fetch_assoc[]]{ ?>
            
        
    


Image[s] not found...


Tải lên nhiều hình ảnh và lưu trữ trong cơ sở dữ liệu bằng PHP và MySQL

Phần kết luận

Bài hướng dẫn các bạn tích hợp chức năng upload file mà không cần lưu trữ file trên server. Bạn có thể sử dụng tập lệnh mẫu này để tải lên và lưu trữ hình ảnh trong cơ sở dữ liệu, đồng thời tìm nạp hình ảnh từ cơ sở dữ liệu và hiển thị chúng trên trang web bằng PHP và MySQL. Để làm cho quá trình tải lên hình ảnh trở nên thân thiện với người dùng, hãy sử dụng jQuery để tải lên các tệp có thanh tiến trình bằng Ajax và PHP

Bạn có muốn nhận trợ giúp triển khai hay sửa đổi hoặc nâng cao chức năng của tập lệnh này không?

Hình ảnh được lưu trữ trong cơ sở dữ liệu MySQL như thế nào?

Bạn sẽ cần lưu trữ hình ảnh trong cơ sở dữ liệu dưới dạng BLOB . bạn sẽ muốn tạo một cột có tên PHOTO trong bảng của mình và đặt nó làm mediumblob. Sau đó, bạn sẽ muốn lấy nó từ biểu mẫu như vậy. $data = file_get_contents[$_FILES['photo']['tmp_name']];

Hình ảnh được lưu trữ trong MySQL ở đâu?

Thông thường, khi chúng tôi tải lên tệp hình ảnh bằng PHP, hình ảnh đã tải lên được lưu trữ trong một thư mục của máy chủ và tên hình ảnh tương ứng là .

Hình ảnh có thể được lưu trong MySQL không?

Đối tượng lớn nhị phân [ BLOB ] là loại dữ liệu MySQL có thể lưu trữ dữ liệu nhị phân như hình ảnh, đa phương tiện và tệp PDF .

Những kiểu dữ liệu nào lưu trữ hình ảnh trong MySQL?

Trong MySQL, loại dữ liệu ưa thích để lưu trữ hình ảnh là BLOB .

Chủ Đề