0
私はプロジェクトに取り組んでいます。 Mongooseを介してデータベースに保存しているデータがあります。フィールドの1つは「サムネイル」フィールドです。基本的にファイルがサーバーにアップロードされた後、この関数 'addChildren'が呼び出され、ファイルに関するデータがデータベースに保存されます。Promise.mapへの約束を得るには?
私はfs.readFileでファイル(画像、テキストなど)を読み取り、次にnode-canvasを使用してファイルをbase64に変換しています。
ここに問題があります。これらはfs.readFileSyncを使用するとすべて動作します。しかし、それは私が望むものではありません。値を適切に取得し、それをデータベースに保存する前に、「サムネイル」に格納する方法について、いくつかのガイダンスが必要です。
addChildren(files, owner) {
return Promise.map(files, file => new module.exports({
_id: file.contentType === FOLDER_TYPE ? new Types.ObjectId() : file.key.match(/[^\/]+$/)[0],
ancestors: [],
name: file.originalname,
size: file.size,
type: file.contentType,
thumbnail: this.getThumbnail(file.key, file.contentType),
owner: file.contentType === FOLDER_TYPE ? undefined : owner,
permissions: null,
designroom: this.designroom
}).save());
}
// Note: Key is essentially the unique file-path.
getThumbnail(key, type) {
return new Promise(function(resolve, reject) {
var canvas = new Canvas(300, 200);
var Image = Canvas.Image;
var ctx = canvas.getContext('2d');
var fileURL = "[url to file goes here]" + key +"/[filename]";
switch (type) {
case 'image/jpeg':
fs.readFile(fileURL, function(err, data) {
if (err) {
reject (err);
} else {
var img = new Image;
img.src = data;
ctx.drawImage(img, 0, 0, img.width/canvas.width, img.height/canvas.height);
var result = canvas.toDataURL();
console.log(result);
resolve(result)
}
});
break;
}
});
}
これは正しかったです!ありがとう! – Alex