lew*_*uez 4 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"}
我实际上发现了这个问题,并认为我会回到 SO 来帮助任何可能正在挣扎的人。
本质上,我所做的是使用 C# 生成一个 JSON 文件。该文件用于运行并引入各种数据的导入脚本。集合中的一个字段需要将二进制图像数据存储为 Base64 编码的字符串。Mongo 文档(Import Export Tools和Importing 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 文件。娱乐时间。
| 归档时间: | 
 | 
| 查看次数: | 3554 次 | 
| 最近记录: |