このコードを使用してファイルの更新を行っています。
app.post("/UploadFile", function(request, response)
{
var file = request.files.UploadedFile;
var name = request.param("Name");
var componentId = request.param("ComponentId");
console.log("Uploading: " + name);
var parameters =
{
filename: name,
metadata:
{
Type: "Screenshot",
ComponentId: componentId
}
};
grid.files.findOne( { "metadata.ComponentId" : componentId }, function(error, existing)
{
console.log("done finding");
if (error)
{
common.HandleError(error);
}
else
{
if (existing)
{
console.log("Exists: " + existing._id);
grid.remove({ _id: existing._id }, function(removeError)
{
if (removeError)
{
common.HandleError(removeError, response);
}
else
{
SaveFile(file, parameters, response);
}
});
}
else
{
console.log("new");
SaveFile(file, parameters, response);
}
}
});
});
function SaveFile(file, parameters, response)
{
console.log("Saving");
var stream = grid.createWriteStream(parameters);
fs.createReadStream(file.path).pipe(stream);
}
基本的に、ID がメタデータに格納されているファイルをチェックしています。存在する場合は保存する前に削除し、存在しない場合は保存します。散発的にしか機能しないようです。ときどき、次の 2 つの誤った動作が見られます。
ファイルは削除されますが、再作成されません。
ファイルは更新されたように見えますが、コードを再度呼び出すまで実際には置き換えられません。したがって、基本的には、置換を登録するために 2 つのファイルをアップロードする必要があります。
それは非常に大ざっぱで、うまくいくかどうかのパターンを実際に判断することはできません.
だから私は何か間違ったことをしていると思います。gridfs-streamを使用してファイルを置き換える正しい方法は何ですか?