2011-01-25 47 views

Respuesta

78

Por favor ver las GridFS documentación para más detalles sobre el almacenamiento de dichos datos binarios.

El soporte para su idioma específico debe estar vinculado a en la parte inferior de la pantalla.

+21

GridFS es para los documentos> 16 MB. No todos los datos binarios son así de grandes. Además de poder sobrepasar ese límite, ¿hay algún otro beneficio al usar GridFS en lugar de solo el tipo BinData? –

+1

Los videos tenderán a ser> 16MB por lo que esta respuesta es probablemente razonable. Quizás debería mencionar esto sin embargo. – Chanoch

46

"Siempre se debe utilizar GridFS para almacenar archivos de más de 16 MB" - When should I use GridFS?

MongoDB BSON documents tienen un límite de 16 MB  . Entonces, si el tamaño total de su matriz de archivos es menor que eso, puede almacenarlos directamente en su documento utilizando el tipo de datos BinData.

Vídeos, imágenes, archivos PDF, hojas de cálculo, etc. - no importa, todos ellos son tratados de la misma. Depende de su aplicación devolver un encabezado de tipo de contenido apropiado para mostrarlos.

Consulte GridFS documentation para obtener más información.

15

Puede intentar éste:

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

Puede utilizar el tipo de datos bin si está utilizando cualquier lenguaje de script para almacenar archivos/imágenes en MongoDB. Bin data está desarrollado para almacenar archivos de pequeño tamaño.

Consulte el controlador del lenguaje de scripting. Para PHP, haga clic en here.

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

En su opinión:

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

Con este código se puede añadir imágenes individuales, así como múltiples en MongoDB.

-5

mejor manera de salvar la imagen En backend nodejs - Profesional Recomendado

var async = require('async'); 
var accessPath = path.join(__dirname, "../uploadLocation"); 
var folderName = new Date().getTime(); 

async.auto({ 
         makeDir: function(next, results) { 
          makeDir(accessPath, folderName, next); 
         }, 
         writeFile: ['makeDir', function(next, results) { 
          writeFile(accessPath, folderName, req.body.user.ImgData, req.body.user.email, next); 
         }], 
        }, function(err, success) { 
         if (err) { 
          console.log("error occurs while saving image") 
         } else { 
          console.log("success", success) 

         } 
        }); 

    var makeDir = function(accessPath, folderName, next) { 
        try { 
         console.log("accessPath inside makeDir", accessPath, folderName) 
         fs.mkdirSync(accessPath + "/upload/user/" + folderName); 
         next(null, "done") 
        } catch (e) { 
         console.log("error in creating folder"); 
         next(e, "Err") 
        } 
       } 

       var writeFile = function(accessPath, folderName, ImgData, email, next) { 

        var userImgName = email + ".jpg"; 
        fs.writeFile(accessPath + "/upload/user/" + folderName + "/" + userImgName, ImgData, function(err, success) { 
         if (err) { 
          next(e, "Err") 
         } else { 
          console.log("success write file"); 
          next(null, null); 
         } 
        }); 
       } 
Cuestiones relacionadas