在猫鼬域上保存图像的最佳方法

时间:2016-12-14 15:52:48

标签: node.js image mongodb mongoose

我是node.js的新手,我试图创建一个像普通应用程序一样保存用户照片的应用程序。用户可以设置个人资料图片,也可以在他们的墙上添加其他图片。

我也完成了应用程序的其他部分,但是我试图找出保存这些图像的最佳方法 - 因为我的应用程序应该能够扩展数量用户数量众多。

我引用了: How to upload, display and save images using node.js and express(在服务器上保存图像)

还有:http://blog.robertonodi.me/managing-files-with-node-js-and-mongodb-gridfs/(通过grid-fs在mongo上保存图像)

我想知道什么是最好的选择。

那么,你能否建议我必须支持哪些内容?

谢谢,

1 个答案:

答案 0 :(得分:0)

这取决于您的应用程序需求,我为类似的应用程序做的一件事是在服务器应用程序的文件存储逻辑上创建一个抽象。

var DiskStorage = require('./disk');
var S3Storage = require('./s3');
var GridFS = require('./gridfs');

function FileStorage(opts) {
  if (opts.type === 'disk') {
    this.storage = new DiskStorage(opts);
  }

  if (opts.type === 's3') {
    this.storage = new S3Storage(opts);
  }

  if (opts.type === 'gridfs') {
    this.storage = new GridFS(opts);
  }
}

FileStorage.prototype.store = function(opts, callback) {
  this.storage.store(opts, callback);
}

FileStorage.prototype.serve = function(filename, stream, callback) {
  this.storage.serve(filename, stream, callback);
}

module.exports = FileStorage;

基本上,您将使用不同的逻辑实现来存储用户上传的内容。当你需要它时,你可以从本地文件存储/ mongo gridfs扩展到S3。但是,对于在数据库中存储用户文件关系时的无缝转换,您还可以存储文件提供程序,本地或S3。

当我们讨论许多上传内容时,将图像直接保存到本地文件系统有时会有点复杂,您可能很容易遇到How many files can I put in a directory?等限制。 GridFS不应该有这样的问题,我在使用MongoDB进行文件存储方面有很好的经验,但这取决于应用程序到应用程序。