MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Hiển thị hình ảnh được lưu trữ trong Mongo (GridFS) với Node + Jade + Express

Tôi đã tìm ra điều này (cảm ơn Timothy!). Vấn đề là sự hiểu biết của tôi về tất cả các công nghệ này và cách chúng kết hợp với nhau. Dành cho bất kỳ ai quan tâm đến việc hiển thị hình ảnh từ MongoDB GridFS bằng Node, Express và Jade ...

Tài liệu của tôi trong MongoDB có tham chiếu đến Hình ảnh được lưu trữ trong GridFS, là một ObjectId được lưu trữ dưới dạng chuỗi. ví dụ. MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} <- NB:Biểu diễn chuỗi của ObjectId. Lý do tôi lưu trữ nó dưới dạng một chuỗi là vì việc lưu trữ ObjectId đã mang lại cho tôi một cặp trong Định tuyến vì nó đang hiển thị dưới dạng nhị phân và tôi không thể tìm ra cách khắc phục điều này. (Có thể ai đó có thể giúp ở đây?). Dù sao, giải pháp tôi có là bên dưới:

FileRepository - Lấy hình ảnh từ GridFS, tôi chuyển vào một String Id, sau đó tôi chuyển đổi thành BSON ObjectId (bạn cũng có thể lấy tệp theo tên tệp):

FileRepository.prototype.getFile = function(callback,id) {
   var gs = new GridStore(this.db,new ObjectID(id), 'r');
   gs.open(function(err,gs){
      gs.read(callback);
   });
 };

Mẫu ngọc - Hiển thị Đánh dấu HTML:

img(src='/data/#{myentity.ImageId}')

Tệp App.JS - Định tuyến (sử dụng Express) Tôi thiết lập tuyến '/ data /:imgtag' cho hình ảnh động:

app.get('/data/:imgtag', function(req, res) {
  fileRepository.getFile( function(error,data) {
     res.writeHead('200', {'Content-Type': 'image/png'});
     res.end(data,'binary');
  }, req.params.imgtag );
});

Và điều đó đã hoàn thành công việc. Mọi thắc mắc hãy cho tôi biết :)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo tổng hợp mảng lồng nhau

  2. Làm thế nào để điền đối tượng có mảng đối tượng trong mongoose?

  3. Mongoose findOne tài liệu được nhúng bởi _id

  4. Gói sao lưu MongoDB

  5. Triển khai cơ sở dữ liệu đám mây với ClusterControl 1.6