C#MongoDB:先前删除后不会上传块文件

时间:2016-05-25 18:37:53

标签: c# mongodb

我在设计用于比较两个图像的更新功能时遇到了一些问题,如果不同,请从Mongo中删除现有图像和数据,并将其替换为新副本。问题是,每个组件都可以单独工作。加载功能将成功上传图像和Bson文档。删除方法将成功(似乎)删除它们;文档,fs.files条目和fs.chunks条目。

但是,当删除条目然后继续上传新图像时,只会将fs.files条目和BsonDocument推送到服务器。实际图像没有了。

我正在为Windows运行MongoDB 3.2.6。

替换块后跟上传块

if (newMD5.Equals(oldMD5) == false)
{
    Debug.WriteLine("Updating image " + fileWithExt);

    BsonValue targetId = docCollection.FindOne(Query.EQ("id", fileNoExt))["_id"];
    deleteImageEntry(Query.EQ("_id", new ObjectId(targetId.ToString())));

    //continues to upload replacement
} else
{
    continue;
}                     
}

//create new entry 
uploadInfo = mongoFileSystem.Upload(memStream, fileFs);                    

BsonDocument entry = new BsonDocument();
entry.Add("fileId", uploadInfo.Id);
entry.Add("id", fileNoExt);      
entry.Add("filename", fileFs);
entry.Add("user", "");

//appends to image collection
var newItemInfo = docCollection.Save(entry);

删除方法

    public static bool deleteImageEntry(IMongoQuery query)
{
    MongoInterface mongo = new MongoInterface();

    try
    {
        var docCollection = mongo.Database.GetCollection("employees");
        var imageCollection = mongo.Database.GetCollection<EmployeeImage>("employees");

         var toDelete = docCollection.FindOne(query);               
         BsonValue fileId = toDelete.GetValue("fileId");

        mongo.Gridfs.DeleteById(fileId);
        WriteConcernResult wresult = imageCollection.Remove(query);

    }
    catch (Exception e)
    {
        Debug.WriteLine("Image could not be deleted \n\r" + e.Message);
        return false;
    }
    return true;
}

对不起代码很乱,我做了很多游击测试,试图找到原因。类似的代码在该计划的其他部分也有效。

1 个答案:

答案 0 :(得分:0)

这很令人尴尬。经过几个小时的调试后,原来是MD5.ComputerHash()函数将memStream迭代器设置到最后,因此没有上传数据。使用memStream.Position = 0;解决了这个问题。