Câu trả lời:
Vui lòng xem tài liệu GridFS để biết chi tiết về việc lưu trữ dữ liệu nhị phân đó.
Hỗ trợ cho ngôn ngữ cụ thể của bạn nên được liên kết ở dưới cùng của màn hình.
"Bạn nên luôn luôn sử dụng GridFS để lưu trữ các tệp lớn hơn 16MB" - Khi nào tôi nên sử dụng GridFS?
Tài liệu MongoDB BSON được giới hạn ở mức 16 MB. Vì vậy, nếu tổng kích thước của mảng tệp của bạn nhỏ hơn số đó, bạn có thể lưu trữ chúng trực tiếp trong tài liệu của mình bằng kiểu dữ liệu BinData .
Video, hình ảnh, PDF, bảng tính, v.v. - không thành vấn đề, tất cả chúng đều được đối xử như nhau. Tùy thuộc vào ứng dụng của bạn để trả về một tiêu đề loại nội dung phù hợp để hiển thị chúng.
Kiểm tra tài liệu GridFS để biết thêm chi tiết.
Bạn có thể thử cái này:
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
Có một plugin Mongoose có sẵn trên NPM được gọi là mongoose-file. Nó cho phép bạn thêm một trường tệp vào Lược đồ Mongoose để tải tệp lên. Tôi chưa bao giờ sử dụng nó nhưng nó có thể hữu ích. Nếu hình ảnh rất nhỏ, bạn có thể Base64 mã hóa chúng và lưu chuỗi vào cơ sở dữ liệu.
Lưu trữ một số tệp nhỏ (dưới 1 MB) bằng MongoDB trong NodeJS KHÔNG CÓ GridFS
cài đặt bên dưới thư viện
var express = require(‘express’);
var fs = require(‘fs’);
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var multer = require('multer');
kết nối bạn mongo db:
mongoose.connect(‘url_here’);
Xác định lược đồ cơ sở dữ liệu
var Item = new ItemSchema(
{ img:
{ data: Buffer, contentType: String }
}
);
var Item = mongoose.model('Clothes',ItemSchema);
sử dụng phần mềm trung gian Multer để tải ảnh lên phía máy chủ.
app.use(multer({ dest: ‘./uploads/’,
rename: function (fieldname, filename) {
return filename;
},
}));
đăng req lên db của chúng tôi
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);
}
});
Theo quan điểm của bạn:
<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="photos">
Với mã này, bạn có thể thêm một ảnh cũng như nhiều ảnh trong MongoDB.
Điều này làm việc cho tôi,
base64
, xem stackoverflow.com/questions/11442356 Tôi cũng tìm thấy menge.io/2015/03/24/storing-small-images-in- mongodb một điểm khởi đầu rất tốt.