나는 파일 업데이트를 수행하는이 코드를 사용하고 있습니다 : 어떻게하면 gridfs-stream으로 대체 할 수 있습니까?
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가있는 파일을 확인하고 있습니다. 존재하는 경우 저장하기 전에 삭제하고, 저장하지 않으면 저장합니다. 그것은 단지 산발적으로 작동하는 것 같습니다. 때때로 두 가지 오류가있는 동작을 보게됩니다.
파일은 삭제되지만 다시 생성되지는 않습니다.
파일이 업데이트 된 것처럼 보이지만 코드를 다시 호출하기 전에는 파일이 실제로 대체되지 않습니다. 그래서 기본적으로 대체 파일을 등록하기 위해 두 개의 파일 업로드를 수행해야합니다.
매우 스케치되어있어 작동 여부에 대한 패턴을 실제로 결정할 수 없습니다.
그래서 내가 잘못하고 있다고 가정합니다. gridfs-stream을 사용하여 파일을 대체하는 올바른 방법은 무엇입니까?