0

このコードを使用してファイルの更新を行っています。

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を使用してファイルを置き換える正しい方法は何ですか?

4

1 に答える 1