ฉันจะเก็บรูปภาพไว้ในฐานข้อมูล MongoDB แทนที่จะเป็นแค่ข้อความได้อย่างไร ฉันสามารถสร้างอาเรย์ของภาพในฐานข้อมูล MongoDB ได้หรือไม่? เป็นไปได้ไหมที่จะทำเช่นเดียวกันกับวิดีโอ
ฉันจะเก็บรูปภาพไว้ในฐานข้อมูล MongoDB แทนที่จะเป็นแค่ข้อความได้อย่างไร ฉันสามารถสร้างอาเรย์ของภาพในฐานข้อมูล MongoDB ได้หรือไม่? เป็นไปได้ไหมที่จะทำเช่นเดียวกันกับวิดีโอ
คำตอบ:
โปรดดูเอกสารGridFSสำหรับรายละเอียดเกี่ยวกับการจัดเก็บข้อมูลไบนารีดังกล่าว
การสนับสนุนภาษาเฉพาะของคุณควรเชื่อมโยงกับด้านล่างของหน้าจอ
"คุณควรใช้ GridFS เพื่อจัดเก็บไฟล์ที่มีขนาดใหญ่กว่า 16MB" - ฉันควรใช้ GridFS เมื่อใด
เอกสาร MongoDB BSONถูกต่อยอดที่ 16 MB ดังนั้นหากขนาดรวมของอาเรย์ของไฟล์ของคุณน้อยกว่านั้นคุณอาจเก็บไว้ในเอกสารของคุณโดยตรงโดยใช้ประเภทข้อมูลBinData
วิดีโอรูปภาพ PDF สเปรดชีตและอื่น ๆ - ไม่สำคัญพวกเขาทั้งหมดจะได้รับการปฏิบัติเหมือนกัน ขึ้นอยู่กับแอปพลิเคชันของคุณเพื่อส่งคืนส่วนหัวประเภทเนื้อหาที่เหมาะสมเพื่อแสดง
ตรวจสอบเอกสาร GridFSสำหรับรายละเอียดเพิ่มเติม
คุณสามารถลองอันนี้:
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();
http://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb
มีปลั๊กอิน Mongoose ที่มีอยู่ใน NPM ชื่อ mongoose-file มันช่วยให้คุณเพิ่มฟิลด์ไฟล์ลงใน Mongoose Schema เพื่ออัพโหลดไฟล์ ฉันไม่เคยใช้มันมาก่อน แต่อาจเป็นประโยชน์ หากภาพมีขนาดเล็กมากคุณสามารถ Base64 เข้ารหัสและบันทึกสตริงลงในฐานข้อมูล
การจัดเก็บไฟล์ขนาดเล็ก (น้อยกว่า 1MB) ด้วย MongoDB ใน NodeJS โดยไม่มี GridFS
คุณสามารถใช้ชนิดข้อมูล bin หากคุณใช้ภาษาสคริปต์ใด ๆ เพื่อจัดเก็บไฟล์ / ภาพใน MongoDB ข้อมูล Bin ได้รับการพัฒนาเพื่อจัดเก็บไฟล์ขนาดเล็ก
ติดตั้งไลบรารีด้านล่าง
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();
});
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
สิ่งนี้ได้ผลสำหรับฉัน
base64
ดูstackoverflow.com/questions/11442356ฉันยังพบmenge.io/2015/03/24/storing-small-images-in- Mongodbเป็นจุดเริ่มต้นที่ดีมาก