Menyimpan gambar dalam database MongoDB

174

Bagaimana saya bisa menyimpan gambar dalam database MongoDB bukan hanya teks? Bisakah saya membuat array gambar dalam database MongoDB? Apakah mungkin untuk melakukan hal yang sama untuk video?

Chani
sumber
1
Jawaban singkatnya adalah: Ya, Anda dapat menyimpan gambar (kecil) jika Anda menyandikannya dengan benar base64, lihat stackoverflow.com/questions/11442356 Saya juga menemukan menge.io/2015/03/24/storing-small-images-in- mongodb titik awal yang sangat bagus.
B - rian

Jawaban:

108

Silakan lihat dokumen GridFS untuk perincian tentang penyimpanan data biner tersebut.

Dukungan untuk bahasa spesifik Anda harus ditautkan ke bagian bawah layar.

Gates VP
sumber
40
GridFS untuk dokumen> 16MB. Tidak semua data biner sebesar ini. Selain bisa melampaui batas itu, apakah ada manfaat lain untuk menggunakan GridFS bukan hanya tipe BinData?
Brandon Fitzpatrick
3
Video akan cenderung> 16MB sehingga jawaban ini mungkin masuk akal. Mungkin harus menyebutkan ini.
Chanoch
1
ada solusi lain, daripada menggunakan GridFS?
Abhishek Mani
1
@AbhishekMani solusi lain adalah tidak menyimpannya di MongoDB sama sekali. Sekarang, pada tahun 2018, jauh lebih mudah untuk menulis data ini ke sesuatu seperti penyimpanan Amazon S3 atau Azure BLOB.
Gates VP
Saya pikir apa yang dikatakan MongoDB
xinbenlv
64

"Anda harus selalu menggunakan GridFS untuk menyimpan file yang lebih besar dari 16MB" - Kapan saya harus menggunakan GridFS?

Dokumen MongoDB BSON dibatasi pada 16 MB. Jadi, jika ukuran total array file Anda kurang dari itu, Anda dapat menyimpannya langsung di dokumen Anda menggunakan BinData data .

Video, gambar, PDF, spreadsheet, dll. - tidak masalah, semuanya diperlakukan sama. Terserah aplikasi Anda untuk mengembalikan header tipe konten yang sesuai untuk menampilkannya.

Lihat dokumentasi GridFS untuk lebih jelasnya.

Mike Causer
sumber
24

Anda dapat mencoba yang ini:

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();
victoriza
sumber
13

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

Ada plugin Mongoose yang tersedia di NPM disebut file luwak. Ini memungkinkan Anda menambahkan bidang file ke Skema Mongoose untuk mengunggah file. Saya belum pernah menggunakannya tetapi mungkin terbukti bermanfaat. Jika gambarnya sangat kecil, Anda bisa Base64 menyandikannya dan menyimpan string ke database.

Menyimpan beberapa file kecil (di bawah 1MB) dengan MongoDB di NodeJS TANPA GridFS

Mick Cullen
sumber
8

Anda bisa menggunakan tipe data bin jika Anda menggunakan bahasa scripting apa pun untuk menyimpan file / gambar di MongoDB. Bin data dikembangkan untuk menyimpan file ukuran kecil.

Lihat driver bahasa scripting Anda. Untuk PHP, klik di sini .

Tharindu
sumber
6

pasang pustaka di bawah ini

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

hubungkan ur mongo db:

mongoose.connect(‘url_here’);

Tentukan Skema basis data

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

menggunakan middleware Multer untuk mengunggah foto di sisi server.

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

kirim req ke db kami

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();
});
Samkit Shah
sumber
Pak bagaimana jika saya ingin menambahkan array Gambar
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);
   }
});

Menurut Anda:

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

Dengan kode ini Anda dapat menambahkan gambar tunggal dan banyak di MongoDB.

AshvinG
sumber
0

Ini berhasil untuk saya,

  1. Masuk direktori ini Dalam CMD: - C: \ Program Files \ MongoDB \ Server \ 4.0 \ bin
  2. jalankan perintah berikut: - mongofiles put image.jpg
  3. untuk file tertentu kami menggunakan: - db.fs.files.find.pretty ()
harikesh jaiswal
sumber