Hướng dẫn store image in mongodb - lưu trữ hình ảnh trong mongodb
Show
Sử dụng ExpressJS, Mongoose và MulterHình ảnh đã trở thành một phần quan trọng của Internet. Nó không chỉ là các ứng dụng web cần hình ảnh, phương tiện truyền thông xã hội đã đảm bảo rằng người dùng không chỉ tiêu thụ dữ liệu mà còn tạo ra và chia sẻ chúng. Các ứng dụng như WhatsApp, Telegram và Discord cũng hỗ trợ chia sẻ tài liệu. Vì vậy, là một nhà phát triển phụ trợ, việc xử lý hình ảnh và lưu trữ chúng trên cơ sở dữ liệu là phải. Đối với hướng dẫn này, tôi cho rằng bạn khá giỏi với ExpressJS và có thể sử dụng Mongoose, hoặc ít nhất là biết cách sử dụng trình điều khiển gốc MongoDB cho NodeJS. Tôi cũng cho rằng máy chủ Express của bạn đã được thiết lập với Mongoose hoặc bạn đang sử dụng trình điều khiển MongoDB gốc cho NodeJS Mẫu mã hóaKhi thực hiện yêu cầu
Tại sao xử lý hình ảnh là khác nhau trên Express?Khi bạn gửi dữ liệu biểu mẫu đến phần phụ trợ Express, Express được trang bị xử lý các mã hóa Thiết lập lược đồ của bạnBạn cần xác định lược đồ // upload.js 0 cho bộ sưu tập nơi bạn sẽ lưu trữ hình ảnh của mình. Nếu bạn đang sử dụng trình điều khiển MongoDB bản địa, bạn có thể bỏ qua phần này.// Upload.js Trong lược đồ trên, khối // upload.js 1 là trường quan trọng nhất, phần còn lại có thể được bỏ qua một cách thuận tiện để phù hợp với yêu cầu của bạn.Thiết lập MulterCài đặt Multer cho ứng dụng của bạn: Sử dụng NPM:// upload.js 2Sử dụng sợi:// upload.js 3Bây giờ, hãy để tạo ra một tuyến đường sẽ xử lý tải lên tệp. Nhưng trước đó, hãy để ứng dụng cho phép ứng dụng của chúng tôi sử dụng Multer trong // upload.js 4.// upload.js Đoạn trích này đảm bảo rằng tệp được phân tích cú pháp và lưu trữ trong bộ nhớ. CẢNH BÁO: Đảm bảo rằng bạn thực hiện các bước để đảm bảo rằng tệp được tải lên là rất lớn, nếu không bạn có thể nhìn vào mối đe dọa từ chối dịch vụ. Có một số tùy chọn mà bạn có thể sử dụng trong Multer. Hãy xem chúng ở đây.WARNING: Make sure that you take steps to make sure that the file being uploaded isn’t huge, or else you could be looking at a Denial-of-service threat. There are some options that you can use in multer. Take a look at them here. Sử dụng phần mềm trung gian Multer trong tuyến đường của bạnBây giờ bạn đã thiết lập Multer thành công, đã đến lúc sử dụng nó như một phần mềm trung gian trong các yêu cầu của bạn. app.post("/upload", upload.single("file"), async (req, res) => { Bạn cũng có thể sử dụng // upload.js 5 thay vì // upload.js 6 nếu bạn đang mong đợi nhận được nhiều hơn một tệp từ phía trước. Thêm về điều đó ở đây.Giải thích mãPhần mềm trung gian // upload.js 7 được sử dụng để nói với máy chủ rằng chỉ có một tệp được mong đợi từ trình duyệt. Đối số bên trong // upload.js 6 cho biết tên của trường tệp ở dạng HTML. Sử dụng phần mềm trung gian này cho phép chúng tôi sử dụng // upload.js 9 bên trong định nghĩa tuyến đường để truy cập vào tệp đã nhận được. Chúng tôi đã sử dụng app.post("/upload", upload.single("file"), async (req, res) => { 0 và app.post("/upload", upload.single("file"), async (req, res) => { 1 để lưu tệp trên cơ sở dữ liệu. app.post("/upload", upload.single("file"), async (req, res) => { 2 là dữ liệu nhị phân thô của tệp nhận được và chúng tôi sẽ lưu trữ nó trên cơ sở dữ liệu. app.post("/upload", upload.single("file"), async (req, res) => { 1 cũng rất quan trọng đối với chúng tôi vì nó sẽ cho trình duyệt biết cách phân tích dữ liệu nhị phân thô, tức là cách giải thích dữ liệu như, cho dù đó là hình ảnh PNG hay JPEG, hoặc một cái gì đó khác. Để tìm hiểu những thông tin khác có thể được truy cập từ // upload.js 9, bấm vào đây. Chúng tôi phải chia đối tượng tệp thành hai thuộc tính, cụ thể là dữ liệu, chứa nhị phân thô và ContentType, chứa mimetype.data, which contains the raw binary, and the contentType, which contains the mimetype.Gửi dữ liệu từ FrontendHãy nhớ rằng, Multer chỉ chấp nhận Làm thế nào để chuyển đổi nó trở lại một hình ảnh?Vâng, về cơ bản có hai cách bạn có thể làm điều này. Bạn hoặc chuyển đổi dữ liệu nhị phân thành hình ảnh trên phần phụ trợ và sau đó gửi nó đến mặt trận hoặc bạn gửi dữ liệu nhị phân đến mặt trận và sau đó chuyển đổi nó thành một hình ảnh. Nó hoàn toàn phụ thuộc vào ý thích của bạn và trường hợp sử dụng của bạn. Làm thế nào để làm nó? Vâng, bài viết đó là cho một ngày thứ Hai WebDev khác. |