0

我正在尝试将社交网络中的个人资料照片作为 Facebook 保存在我的“fs.files”和“fs.chunks”中,我可以做到这一点,但我发现这样做的方式并不正确。

我的步骤是:

  1. 使用 Passport 在 Facebook 上进行用户登录;
  2. 将图片文件保存在磁盘上(内部应用程序文件夹);
  3. 打开并读取图片文件并将其存储在正确的集合中(来自 Mongo 的文件和块)。

问题发生在第 2 步和第 3 步之间,因为在这种情况下将文件保存在磁盘上并不是最好的主意,并且在尝试将其存储在数据库上时会发生同步问题和延迟。

我曾使用setTimeoutjavascript 函数来实现它。但这太糟糕了,我知道。我想知道以某种方式获取某种文件流并将其直接存储在 GridFS 上或使实际过程更高效的方法:

代码:

从 URL 中获取图片并保存(磁盘步骤)

// processing image 'http://graph.facebook.com/' + user.uid + '/picture';
// facebook -> disk
var userProfilePhoto = user.provider + '_' + user.uid + '.png';

request(user.photoURL)
    .pipe(fs.createWriteStream(configApp.temp_files + userProfilePhoto));

获取磁盘上保存的图片并存储在GridFS上

setTimeout(function() {
    mongoFile.saveFile(user, true, userProfilePhoto, mimeType.mime_png, 
        function(err) {
            if (!err) {
                user.save();
            }
        }
    );
}, 5000);

不幸的是,我不得不使用setTimeout它来实现它,没有它,mongo 只需插入“fs.files”并跳过“fs.chunks”,因为文件还没有准备好 - 似乎还没有保存。

4

1 回答 1

0

我做的!

我替换了http-get的请求插件,所以当文件准备好时,我可以将它存储在 MongoDB 中。

于 2013-01-18T17:07:39.347 回答