2011-01-25 67 views

回答

78

有關存儲此類二進制數據的詳細信息,請參閱GridFS文檔。

支持您的特定語言應該鏈接到屏幕的底部。

+21

GridFS的是文件> 16MB。並非所有的二進制數據都很大。除了能夠超越這個限制之外,使用GridFS而不是BinData類型還有其他好處嗎? – 2015-01-29 16:32:32

46

「你應該總是使用GridFS的存儲比16MB更大的文件」 - When should I use GridFS?

的MongoDB BSON documents在16   MB被封。因此,如果文件數組的總大小小於此值,可以使用BinData數據類型將它們直接存儲在文檔中。

視頻,圖片,PDF文件,電子表格等 - 沒關係,它們都是一樣的。這取決於您的應用程序返回適當的內容類型標題以顯示它們。

查看GridFS documentation瞭解更多詳情。

15

你可以試試這個:

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

,如果您使用任何腳本語言的文件/圖片存儲在MongoDB中您可以使用垃圾桶的數據類型。 Bin數據的開發是爲了存儲小尺寸的文件。

請參閱您的腳本語言驅動程序。對於PHP,請點擊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); 
    } 
}); 

在你看來:

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

有了這個代碼,你可以在MongoDB中添加單以及多個圖像。保存圖片在後臺的NodeJS

-5

最佳途徑 - 專業推薦

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