「fs.files」と「fs.chunks」にもFacebookとしてソーシャルネットワークからプロフィール写真を保存しようとしていますが、これを達成することはできますが、私が見つけた方法は適切なものではありません.
私の手順は次のとおりです。
- Passport を使用して Facebook にユーザー ログオンを作成します。
- 画像ファイルをディスク (内部アプリケーション フォルダー) に保存します。
- 画像ファイルを開いて読み取り、適切なコレクション (Mongo のファイルとチャンク) に保存します。
問題はステップ 2 と 3 の間で発生します。この場合、ファイルをディスクに保存することは最善の方法ではなく、DB にファイルを保存しようとすると同期の問題と遅延が発生するためです。
私はsetTimeout
それを実現するためにjavascript関数を使用していました。しかし、それはとても悪いです、私は知っています。ある種のファイルストリームを取得して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
、ファイルがまだ準備されていないため、モンゴは「fs.files」に挿入し、「fs.chunks」をスキップするだけで、それを可能にするために使用する必要がありました-まだ保存されていないようです。