จัดเก็บภาพในฐานข้อมูล MongoDB


174

ฉันจะเก็บรูปภาพไว้ในฐานข้อมูล MongoDB แทนที่จะเป็นแค่ข้อความได้อย่างไร ฉันสามารถสร้างอาเรย์ของภาพในฐานข้อมูล MongoDB ได้หรือไม่? เป็นไปได้ไหมที่จะทำเช่นเดียวกันกับวิดีโอ


1
คำตอบสั้น ๆ คือ: ใช่คุณสามารถจัดเก็บภาพ (ขนาดเล็ก) หากคุณเข้ารหัสอย่างถูกต้องด้วยbase64ดูstackoverflow.com/questions/11442356ฉันยังพบmenge.io/2015/03/24/storing-small-images-in- Mongodbเป็นจุดเริ่มต้นที่ดีมาก
B - rian

คำตอบ:


108

โปรดดูเอกสารGridFSสำหรับรายละเอียดเกี่ยวกับการจัดเก็บข้อมูลไบนารีดังกล่าว

การสนับสนุนภาษาเฉพาะของคุณควรเชื่อมโยงกับด้านล่างของหน้าจอ


40
GridFS สำหรับเอกสาร> 16MB ไม่ใช่ข้อมูลไบนารีทั้งหมดที่มีขนาดใหญ่นี้ นอกเหนือจากความสามารถที่เกินขีด จำกัด นั้นแล้วมีประโยชน์อื่น ๆ อีกหรือไม่ที่จะใช้ GridFS แทนประเภท BinData?
Brandon Fitzpatrick

3
วิดีโอมีแนวโน้มที่จะ> 16MB ดังนั้นคำตอบนี้อาจสมเหตุสมผล ควรพูดถึงเรื่องนี้แม้ว่า
Chanoch

1
วิธีอื่น ๆ แทนที่จะใช้ GridFS?
Abhishek Mani

1
@AbhishekMani โซลูชันอื่นไม่ได้เก็บไว้ใน MongoDB เลย ตอนนี้ในปีพ. ศ. 2561 การเขียนข้อมูลนี้ไปยังสิ่งต่างๆเช่นที่เก็บข้อมูล S3 หรือ Azure BLOB ของ Amazon ทำได้ง่ายขึ้นอย่างไม่ จำกัด
Gates VP

ฉันคิดว่า MongoDB พูดว่าอะไร
xinbenlv

64

"คุณควรใช้ GridFS เพื่อจัดเก็บไฟล์ที่มีขนาดใหญ่กว่า 16MB" - ฉันควรใช้ GridFS เมื่อใด

เอกสาร MongoDB BSONถูกต่อยอดที่ 16 MB ดังนั้นหากขนาดรวมของอาเรย์ของไฟล์ของคุณน้อยกว่านั้นคุณอาจเก็บไว้ในเอกสารของคุณโดยตรงโดยใช้ประเภทข้อมูลBinData

วิดีโอรูปภาพ PDF สเปรดชีตและอื่น ๆ - ไม่สำคัญพวกเขาทั้งหมดจะได้รับการปฏิบัติเหมือนกัน ขึ้นอยู่กับแอปพลิเคชันของคุณเพื่อส่งคืนส่วนหัวประเภทเนื้อหาที่เหมาะสมเพื่อแสดง

ตรวจสอบเอกสาร GridFSสำหรับรายละเอียดเพิ่มเติม


24

คุณสามารถลองอันนี้:

String newFileName = "my-image";
File imageFile = new File("/users/victor/images/image.png");
GridFS gfsPhoto = new GridFS(db, "photo");
GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile);
gfsFile.setFilename(newFileName);
gfsFile.save();

13

http://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb

มีปลั๊กอิน Mongoose ที่มีอยู่ใน NPM ชื่อ mongoose-file มันช่วยให้คุณเพิ่มฟิลด์ไฟล์ลงใน Mongoose Schema เพื่ออัพโหลดไฟล์ ฉันไม่เคยใช้มันมาก่อน แต่อาจเป็นประโยชน์ หากภาพมีขนาดเล็กมากคุณสามารถ Base64 เข้ารหัสและบันทึกสตริงลงในฐานข้อมูล

การจัดเก็บไฟล์ขนาดเล็ก (น้อยกว่า 1MB) ด้วย MongoDB ใน NodeJS โดยไม่มี GridFS


8

คุณสามารถใช้ชนิดข้อมูล bin หากคุณใช้ภาษาสคริปต์ใด ๆ เพื่อจัดเก็บไฟล์ / ภาพใน MongoDB ข้อมูล Bin ได้รับการพัฒนาเพื่อจัดเก็บไฟล์ขนาดเล็ก

อ้างถึงไดรเวอร์ภาษาสคริปต์ของคุณ สำหรับ PHP คลิกที่นี่


6

ติดตั้งไลบรารีด้านล่าง

var express = require(‘express’);
var fs = require(‘fs’);
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var multer = require('multer');

เชื่อมต่อ mongo ของคุณ db:

mongoose.connect(‘url_here’);

กำหนดสคีมาฐานข้อมูล

var Item = new ItemSchema(
  { img: 
  { data: Buffer, contentType: String }
 }
);
var Item = mongoose.model('Clothes',ItemSchema);

ใช้มิดเดิลแวร์มัลเตอร์เพื่ออัปโหลดรูปภาพทางฝั่งเซิร์ฟเวอร์

app.use(multer({ dest: ‘./uploads/’,
rename: function (fieldname, filename) {
return filename;
},
}));

โพสต์คำขอไปยังฐานข้อมูลของเรา

app.post(‘/api/photo’,function(req,res){
var newItem = new Item();
newItem.img.data = fs.readFileSync(req.files.userPhoto.path)
newItem.img.contentType = image/png’;
newItem.save();
});

เซอร์ถ้าฉันต้องการเพิ่มอาร์เรย์ของรูปภาพ
Nikhil Patil

3
var upload = multer({dest: "./uploads"});
var mongo = require('mongodb');
var Grid = require("gridfs-stream");
Grid.mongo = mongo;

router.post('/:id', upload.array('photos', 200), function(req, res, next){
gfs = Grid(db);
var ss = req.files;
   for(var j=0; j<ss.length; j++){
     var originalName = ss[j].originalname;
     var filename = ss[j].filename;
     var writestream = gfs.createWriteStream({
         filename: originalName
     });
    fs.createReadStream("./uploads/" + filename).pipe(writestream);
   }
});

ในมุมมองของคุณ:

<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="photos">

ด้วยรหัสนี้คุณสามารถเพิ่มรูปภาพเดียวหรือหลายภาพใน MongoDB


0

สิ่งนี้ได้ผลสำหรับฉัน

  1. ไปในไดเรกทอรีนี้ใน CMD: - C: \ Program Files \ MongoDB \ Server \ 4.0 \ bin
  2. รันคำสั่งต่อไปนี้: - mongofiles ใส่ image.jpg
  3. สำหรับไฟล์ที่เลือกที่เราใช้: - db.fs.files.find.pretty ()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.