2011-01-25 44 views

Trả lời

78

Vui lòng xem tài liệu GridFS để biết chi tiết về cách lưu trữ dữ liệu nhị phân đó.

Hỗ trợ ngôn ngữ cụ thể của bạn phải được liên kết ở cuối màn hình.

+21

GridFS là cho các tài liệu> 16MB. Không phải tất cả dữ liệu nhị phân đều lớn. Ngoài việc có thể vượt qua giới hạn đó, có lợi ích nào khác khi sử dụng GridFS thay vì chỉ loại BinData không? –

+1

Video sẽ có xu hướng> 16MB nên câu trả lời này có lẽ là hợp lý. Có lẽ nên đề cập đến điều này mặc dù. – Chanoch

46

"Bạn nên thường xuyên sử dụng GridFS để lưu trữ các file lớn hơn 16MB" - When should I use GridFS?

MongoDB BSON documents đượ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, bạn có thể lưu trữ chúng trực tiếp trong tài liệu của mình bằng cách sử dụng loại dữ liệu BinData.

Video, hình ảnh, tệp PDF, bảng tính, v.v. - không quan trọng, tất cả đều được xử lý giống nhau. Tùy thuộc vào ứng dụng của bạn để trả lại tiêu đề loại nội dung thích hợp để hiển thị chúng.

Khám phá GridFS documentation để biết thêm chi tiết.

15

Bạn có thể thử cái này:

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

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

Có một plugin Mongoose có sẵn trên NPM gọi là cầy mangut-file. Nó cho phép bạn thêm một trường tệp vào Lược đồ Mongoose để tải lên tệp. 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.

Storing some small (under 1MB) files with MongoDB in NodeJS WITHOUT GridFS

5

Bạn có thể sử dụng các kiểu dữ liệu bin nếu bạn đang sử dụng bất kỳ ngôn ngữ kịch bản để lưu trữ các tập tin/hình ảnh trong MongoDB. Dữ liệu Bin được phát triển để lưu trữ kích thước tệp nhỏ.

Tham khảo trình điều khiển ngôn ngữ kịch bản của bạn. Đối với PHP, hãy nhấp vào 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); 
    } 
}); 

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 đơn cũng như nhiều hình ảnh trong MongoDB.

-5

cách tốt nhất để tiết kiệm Image Trong Backend nodejs - Professional Đề xuất

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); 
         } 
        }); 
       } 
Các vấn đề liên quan