четверг, 14 декабря 2006 г.

В InfoPath есть функция - вложить файл в форму. Если кто не знает, формы в InfoPath это xml файлы, поэтому файл (в общем случае бинарный) вкладывается туда закодированным.
Вот так:

x0lGQRQAAAABAAAAAAAAABEAAAAGAAAAMQAuAGQAbwBjAAAAMTIzNDU28ODnIOTi4CDy8Og=

И есть потом открыть InfoPath, то всё замечательно раскодируется и раскроется.
Однако!
Формы InfoPath предназначены для автоматизированной обработки. Для того они в xml формате и хранятся!
Остальные (текстовые и числовые) поля читаются с ходу, а поле файла нет! Потому что нет в xml стандарте такого типа поля "файл". Есть. CDATA поля, но это не совсем то, да и не в CDATA пишет InfoPath.
Путём разговора с духами, я обнаружил, что ТЕЛО файла InfoPath кодирует используя Base64. И применив соответствующий метод .NET его можно преобразовать к исходному состоянию.
Однако, мы забыли про имя файла! А оно тоже зашито в этом поле!
Нет бы, не выпендриватся и поставить рядом ещё одно текстовое поле! Так нет.... Закодировали туда же. Ещё и в другом формате... в начале идёт мешанинай байт, а потом в ЮНИКОДЕ имя файла. А потом ко всему этому уже применено Base64.
Вот.. думаю как это расшифровать.

Комментариев нет: