3

これは、ファイルを GridFS にアップロードおよびダウンロードするための私の express.js コードです。

var fs = require("fs");
var gridStream = require("gridfs-stream");
var mongoose = require("mongoose");

exports.init = function(app, db)
{
    var grid = gridStream(db, mongoose.mongo);

    app.post("/UploadFile", function(request, response)
    {
        var file = request.files.UploadedFile;

        var meta = request.param("Meta");
        var name = request.param("Name");

        var stream = grid.createWriteStream(
        {
            filename: name,
            metadata: meta
        });

        fs.createReadStream(file.path)
        .on("end", function()
        {
            response.send({ Success: true });
        })
        .on("Error", function(error)
        {
            HandleError(error, response);
        })
        .pipe(stream);
    });

    app.get("/DownloadFile", function(request, response)
    {
        var selector = request.param("Selector");

        response.writeHead(200, { "Content-Type" : "image/png"});
        grid.createReadStream({ filename: "FileUploadNamed" }).pipe(response);
    });
}

それは完全に機能しますが、読み書きするバケットを指定したいのですが、その方法がわかりません。GridFS コンストラクターを呼び出す例をオンラインで見たことがありますが、ご覧のとおり、ここではそれを行っていません。ドキュメントには、別のバケット名を指定できるとも書かれていますが、その方法については何もわかりません。

ファイルを保存して読み取るバケットを選択するにはどうすればよいですか?

4

1 に答える 1

4

これは、gridfs-stream またはそれが使用する基礎となるネイティブ mongodb ドライバーでは十分に文書化されていませんが、次のようにします。

以下はoptions、gridfs-stream のcreateWriteStream rootのオブジェクトです (オプションに注意してください)。

{
   _id: '50e03d29edfdc00d34000001', 
   filename: 'my_file.txt',         
   mode: 'w', 
   chunkSize: 1024, 
   content_type: 'plain/text', 
   root: 'my_collection',  // Bucket will be 'my_collection' instead of 'fs'
   metadata: {
       ...
   }
}

機能する理由:

gridfs-stream は、ファイルを表すオブジェクトを作成するために、基礎となるmongodbドライバーにoptions呼び出しを渡すオブジェクトを通過します。次に、mongodb ドライバーはオブジェクトをデフォルトの「fs」グリッド バケット プレフィックス文字列のオーバーライドとして認識します。createWriteStreamcreateReadStreamgridStorerootoptions

于 2013-11-18T07:14:22.120 に答える