は、私は同様の用途のためにやったきた一つのことは、サーバアプリケーションのファイル・ストレージ・ロジックの上に抽象化を作成することでした。
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;
基本的には、ユーザーがアップロードしたコンテンツを保存するためのロジックの実装が異なります。そして、必要なときには、ローカルのファイルストレージ/モンゴーグリッドからS3への拡張が可能です。しかし、シームレスに移行するために、ユーザーファイルの関係をデータベースに格納する場合は、ローカルまたはS3のファイルプロバイダも格納できます。
ローカルファイルシステムに直接画像を保存することは、多くのアップロードされたコンテンツについて話しているときに少し複雑になることがあります。How many files can I put in a directory?のような制限があります。 GridFSにはこのような問題はないはずですが、私はファイルストレージとしてMongoDBを使った経験がありましたが、これはアプリケーションによって異なります。