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?


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.


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.


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();

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


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 .


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();
});

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.


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 ()
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.