如何使用mongoimport导入二进制数据?

时间:2012-02-25 20:23:25

标签: mongodb mongodb-.net-driver

我已尝试过为Mongo导入二进制数据的每个组合,但我无法使其工作。我尝试过使用new BinData(0, <bindata>),我尝试过使用 { "$binary" : "<bindata>", "$type" : "0" } 第一个给我一个解析错误。第二个给我一个错误,上面写着“无效使用保留字段名称。”

我可以很好地导入其他对象。作为参考,我正在尝试导入BASE64编码的图像字符串。这是我正在使用的JSON的当前版本:

{"_id" : "72984ce4-de03-407f-8911-e7b03f0fec26","OriginalWidth" : 73, "OriginalHeight" : 150, { "$binary" : "", "$type" : "0" }, "ContentType" : "image/jpeg", "Name" : "test.jpg", "Type" : "5ade8812-e64a-4c64-9e23-b3aa7722cfaa"}

1 个答案:

答案 0 :(得分:4)

我实际上已经发现了这个问题,并且认为我会回到SO帮助那些可能正在挣扎的人。

基本上,我所做的是使用C#生成JSON文件。该文件用于运行并引入各种数据的导入脚本。集合中的一个字段需要将二进制图像数据存储为Base64编码的字符串。 Mongo文档(Import Export ToolsImporting Interesting Types)很有帮助,但仅限于某一点。

为了正确格式化JSON,我必须使用以下C#片段将图像文件作为字节数组并将其转储到字符串中。有一种更有效的方法可以为更大的字符串(StringBuilder为初学者)执行此操作,但我为了说明示例而进行了简化:

byte[] bytes = File.ReadAllBytes(imageFile);
output = "{\"Data\" : {\"$binary\" : \"" + Convert.ToBase64String(bytes) + "\", \"$type\" : \"00\"}, \"ContentType\" : \"" + GetMimeType(fileInfo.Name) + "\", \"Name\" : \"" + fileInfo.Name + "\"}";

顺便说一下,我继续在类型部分失败了。它转换为通用二进制数据在BSON规范中指定:http://bsonspec.org/#/specification

如果你想直接跳到JSON,上面的代码输出一个非常类似的字符串:

{"Data": {"$binary": "[Byte array as Base64 string]", "$type": "00"}, "ContentType": "image/jpeg", "Name": "test.jpg"}

然后,我只使用mongoimport工具来处理生成的JSON。

注意:因为我已经在C#中,我可能只是使用了Mongo DLL并在那里完成了处理,但对于这种特殊情况,我必须创建原始的JSON文件码。有趣的时光。

相关问题