gridfs-stream createWriteStream不上传数据

时间:2014-03-03 10:51:29

标签: javascript angularjs node.js mongodb gridfs

我正在使用以下代码在mongodb中创建一个文件。我没有错。但当我在我的Test数据库中搜索时,没有看到上传的内容。我做错了什么?

var GridStrm = require('gridfs-stream');
    console.log('Logo Upload');

    var conn = mongoose.createConnection('localhost', 'Test', 27017);

    var gfs = GridStrm(conn.db, mongoose.mongo);       

    var writeStream = gfs.createWriteStream('file.txt');
    fs.createReadStream('d:\\somepath').pipe(writestream);

我收到错误Error: EISDIR, read

我收到了新的错误: -

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: Cannot determine state of server
    at canCheckoutReader 

我进一步尝试了以下代码: -

req.pipe(gfs.createWriteStream({
        filename: 'test'
    }));
    res.send("Success!");

但仍然没有结果。

1 个答案:

答案 0 :(得分:1)

更简单的例子

var mongoose = require('mongoose');
var Grid = require('gridfs-stream');
var fs = require('fs');

var conn = mongoose.createConnection('localhost', 'test', 27017 );

conn.once('open', function() {

    var gfs = Grid( conn.db, mongoose.mongo );

    var source = fs.createReadStream('file.txt');

    var target = gfs.createWriteStream({
        filename: 'file.txt'
    });

    source.pipe(target);

});

这将收集到:

> db.fs.files.find()
{
  "_id" : ObjectId("531470dc8b79087430b2e38d"),
  "filename" : "file.txt", 
  "contentType" : "binary/octet-stream",
  "length" : 138,
  "chunkSize" : 262144,
  "uploadDate" : ISODate("2014-03-03T12:09:00.896Z"),
  "aliases" : null,
  "metadata" : null,
  "md5" : "87be58f21745384bcd13743bde9ae8fb"
}

所以你的问题是:

  1. 当您第一次发布时,您有一个流,但您没有使用它。
  2. 您认为这就是您告诉它使用哪个文件的地方
  3. 在所有gridFS方法中,文件名只是发送到服务器的标签。其他方法用于处理真实文件。因此,如果您仍然感到困惑,请尝试代码,然后更改此行:

        var target = gfs.createWriteStream({
            filename: 'dont-exist.txt'
        });
    

    将使用相同的文件内容,只需在服务器上添加新标签即可。