Chào các bạn, hôm nay chúng ta sẽ tìm hiểu cách upload và lưu trữ image mongoDB database. Nó không được khuyến nghị trong các dự án trong thế giới thực để lưu trữ các tệp phương tiện trong cơ sở dữ liệu. Vậy tại sao chúng ta cần học, vì chúng ta là developer mà 😞. Đùa thôi
Vì vậy, hãy bắt đầu mã hóa
Liên kết dự án Github
Tổng quan về ứng dụng
Cấu trúc dự án
Bảng sau đây hiển thị tổng quan về các API còn lại được xuất
MethodsUrlsActionsPOST/file/uploadupload ảnh lên cơ sở dữ liệuGET/file/. filenamestream imageDELETE/file/. filenameXóa hình ảnh khỏi cơ sở dữ liệu
Lưu trữ tệp là một tính năng quan trọng cần có trong nhiều quy trình trên nhiều loại ứng dụng khác nhau. Sự tồn tại của các quy trình như Content Delivery Networks [CDNs]
, được thiết lập thông qua các tùy chọn đám mây của bên thứ ba như Amazon Web Services và các tùy chọn lưu trữ tệp cục bộ luôn giúp việc xây dựng một tính năng như vậy trở nên dễ dàng hơn
Tuy nhiên, khái niệm lưu trữ tệp trực tiếp vào cơ sở dữ liệu thông qua một lệnh gọi API duy nhất đã thu hút tôi trong một thời gian dài. Đó là nơi GridFS xuất hiện trong bức tranh đối với tôi
GridFS - Sự hiểu biết của giáo dân
MongoDB có một đặc tả trình điều khiển để tải lên và truy xuất các tệp từ nó được gọi là GridFS. GridFS cho phép bạn lưu trữ và truy xuất các tệp, bao gồm các tệp vượt quá giới hạn kích thước tài liệu BSON là 16 MB
GridFS về cơ bản lấy một tệp và chia nó thành nhiều phần được lưu trữ dưới dạng các tài liệu riêng lẻ trong hai bộ sưu tập
- bộ sưu tập
chunk
[lưu trữ các phần tài liệu] và - bộ sưu tập
file
[lưu trữ siêu dữ liệu bổ sung do đó]
Mỗi đoạn được giới hạn ở kích thước 255 KB. Điều này có nghĩa là đoạn cuối cùng thường bằng hoặc nhỏ hơn 255 KB. Nghe khá gọn gàng
Khi bạn đọc từ GridFS, trình điều khiển sẽ tập hợp lại tất cả các khối nếu cần. Điều này có nghĩa là bạn có thể đọc các phần của tệp theo phạm vi truy vấn của mình. Chẳng hạn như nghe một đoạn của tệp âm thanh hoặc tìm nạp một đoạn của tệp video.
Ghi chú. Nên sử dụng GridFS để lưu trữ các tệp thường vượt quá giới hạn kích thước 16 MB. Đối với các tệp nhỏ hơn, nên sử dụng định dạng BinData để lưu trữ tệp trong các tài liệu đơn lẻ
Điều này tóm tắt cách GridFS hoạt động nói chung. Đã đến lúc nhúng chân vào một số mã hoạt động và xem cách triển khai một hệ thống như vậy
Nói đủ rồi, cho tôi xem mã
Chúng tôi đang sử dụng Nút. js có quyền truy cập vào phiên bản đám mây của MongoDB để thiết lập. Bạn có thể tìm thấy kho lưu trữ mã cho ứng dụng mẫu tại đây
tarique93102/gridfs-file-storage
Đóng góp cho sự phát triển tarique93102/gridfs-file-storage bằng cách tạo một tài khoản trên GitHub
tarique93102GitHub
Chúng tôi sẽ hoàn toàn tập trung vào các đoạn mã liên quan đến các chức năng của GridFS. Chúng ta sẽ tìm hiểu cách thiết lập và sử dụng nó để lưu trữ tệp, truy xuất tệp hoặc một tệp cụ thể và xóa một tệp cụ thể. Hãy bắt đầu sau đó
Khởi tạo công cụ lưu trữ
Các gói cần thiết để khởi tạo động cơ là multer-gridfs-storage
và multer
. Chúng tôi cũng sử dụng phần mềm trung gian method-override
để kích hoạt thao tác xóa tệp. Mô-đun npm crypto
được sử dụng để mã hóa tên tệp khi được lưu trữ và đọc từ cơ sở dữ liệu
Khi công cụ lưu trữ sử dụng GridFS được khởi tạo, bạn chỉ cần gọi nó bằng phần mềm trung gian multer. Sau đó, nó được chuyển đến tuyến tương ứng thực hiện các hoạt động lưu trữ tệp khác nhau
Khởi tạo Luồng GridFS
Chúng tôi khởi tạo luồng GridFS như được thấy trong mã bên dưới. Luồng là cần thiết để đọc các tệp từ cơ sở dữ liệu và cũng để giúp hiển thị hình ảnh cho trình duyệt khi cần
Tải lên một tệp hoặc hình ảnh
Chúng tôi sử dụng lại phần mềm trung gian tải lên mà chúng tôi đã tạo trước đó.
Ghi chú. Tên file
được sử dụng làm tham số trong upload.single[]
vì chúng tôi có khóa có tên tương tự chứa tệp được gửi từ ứng dụng khách
Tải lên nhiều tệp hoặc hình ảnh
Chúng tôi cũng có thể tải lên nhiều tệp cùng một lúc. Thay vì upload.single[]
, chúng ta chỉ cần sử dụng chunk
0
Ghi chú. Số lượng tệp được tải lên có thể ít hơn số lượng tệp đã xác định
Tìm nạp tất cả các tệp từ cơ sở dữ liệu
Sử dụng luồng được khởi tạo, chúng tôi có thể tìm nạp tất cả các tệp trong cơ sở dữ liệu cụ thể bằng cách sử dụng chunk
1. Sau khi lấy được các tệp, chúng tôi ánh xạ nó thành một mảng và gửi phản hồi
Tìm nạp một tệp theo tên tệp
Rất đơn giản để truy vấn GridFS cho một tệp duy nhất dựa trên một thuộc tính cụ thể như chunk
2. Sử dụng luồng GridFS, bạn có thể truy vấn cơ sở dữ liệu thông qua chức năng chunk
3
Kết xuất một hình ảnh đã tìm nạp vào trình duyệt
Đây là phần phức tạp hơn một chút vì bạn không chỉ phải tìm nạp tệp từ cơ sở dữ liệu mà còn phải hiển thị tệp đó dưới dạng hình ảnh trên trình duyệt tương ứng. Chúng tôi tìm nạp tệp bình thường. Không có thay đổi trong quá trình đó
Sau đó, với sự trợ giúp của phương thức chunk
4 trên luồng gfs, chúng ta có thể dễ dàng hiển thị hình ảnh khi nó trả về luồng có thể đọc được. Làm xong việc đó, chúng ta có thể sử dụng JavaScript của chunk
5 để truyền phản hồi
Xóa một tệp cụ thể theo Id
Xóa một tập tin cũng đơn giản như nhau. Chúng tôi sử dụng phương pháp luồng chunk
6 với tham số chunk
7 để truy vấn và xóa tệp liên quan
Đó là những chức năng chính được cung cấp bởi thiết kế công cụ lưu trữ. Tôi đã tận dụng các tính năng GridFS đã thảo luận để tạo một ứng dụng tải lên hình ảnh đơn giản. Bạn có thể tìm hiểu sâu hơn về mã trong kho lưu trữ
Phần kết luận
Tôi đã mất một thời gian và khá nhiều nỗ lực để hiểu cách sử dụng GridFS cho một dự án cá nhân. Vì điều này, tôi muốn đảm bảo rằng ít nhất một người khác không phải đầu tư cùng một khoảng thời gian
Phải nói rằng, tôi khuyên bạn nên sử dụng GridFS một cách thận trọng. Nó không phải là viên đạn bạc cho tất cả các mối quan tâm về lưu trữ tệp của bạn. Tuy nhiên, đó là một đặc điểm kỹ thuật tiện lợi để biết và nhận thức được.
Nếu bạn có bất kỳ câu hỏi hoặc thắc mắc nào, bạn có thể bình luận trong bài đăng hoặc liên hệ với tôi trên chunk
8
Trong thời gian đó, hãy tiếp tục viết mã
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
QUẢNG CÁO
Tôi viết mã, đọc, viết và chỉ đơn giản là khao khát trở thành một cá nhân tốt hơn tôi ngày hôm nay
Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu