Как вы импортируете двоичные данные с mongoimport? - PullRequest
2 голосов
/ 26 февраля 2012

Я пробовал каждую комбинацию, чтобы импортировать двоичные данные для 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 Ответ

4 голосов
/ 27 марта 2012

Я на самом деле разобрался с этой проблемой и подумал, что вернусь в SO, чтобы помочь любому, кто может бороться.

По сути, я использовал C # для создания файла JSON. Этот файл использовался в скрипте импорта, который запускал и вводил все виды данных. Одно из полей в коллекции требовало хранения данных двоичного изображения в виде строки в кодировке Base64. Документы Mongo ( Инструменты импорта экспорта и Импорт интересных типов ) были полезны, но только до определенного момента.

Для правильного форматирования 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 в коде raw , Веселые времена.

...