Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
Добрый день, Ситуация : есть xml файл, с фотографиями закодированными в base64 , каждая фотография хранится в своем node <tarapmsg:AttachedDocument> <tarapmsg:AttachedDocument xmlns:s02=" http://www.belvis.be/xsd/v1/TarapDataTypes"> <s02:DocumentNr>00199936eebea03880da000F</s02:DocumentNr> <s02:DocumentName>Winter</s02:DocumentName> <s02:DocumentData>/9jV06n1HEx ... Ky0lH0Pmu6h//9k=</s02:DocumentData> <s02:DocumentType>0001.01</s02:DocumentType> <s02:DocumentNameExtention>jpg</s02:DocumentNameExtention> </tarapmsg:AttachedDocument> <tarapmsg:AttachedDocument xmlns:s02=" http://www.belvis.be/xsd/v1/TarapDataTypes"> <s02:DocumentNr>00199936eebed68730900271</s02:DocumentNr> <s02:DocumentName>Images</s02:DocumentName> <s02:DocumentData>yZWYN ... JSVFT0Y=</s02:DocumentData> <s02:DocumentType>0001.01</s02:DocumentType> <s02:DocumentNameExtention>pdf</s02:DocumentNameExtention> </tarapmsg:AttachedDocument> </tarapmsg:AttachedDocument> для удобства сократил поле с елементом содержащим фото в base64 (<s02:DocumentData>) Проблема: пробовал парсить с помощью TextReadera, елемент разбивается на несколько секций которые потом просто копируются в stream a дальше просто декодирую его c помощью ##class(%SYSTEM.Encryption).Base64Decode(аргумент) и потом пытаюсь просто сохранить в файл, НО после того как загружаю stream он по длине почему=то в два раза короче чем сами данные в xml файле и на выходе у меня файл содержащий чуть меньше половины фотографии да и к тому же мазайкой вот сам класс который парсит ClassMethod getData(PathName As %String) [ SqlName = GetData, SqlProc ] { s stream=##class(%Library.GlobalBinaryStream).%New() s status=##class(%XML.TextReader).ParseFile(PathName,.textreader) if $$$ISERR(status) do $System.Status.DisplayError(status) quit while textreader.Read() { if (textreader.LocalName = "DocumentData") && (textreader.NodeType = "element") { while (textreader.Read()) && (textreader.NodeType '= "endelement") { if (textreader.Value'="") && ($l(textreader.Value)>0) { d stream.Write(textreader.Value) } } d stream.Rewind() s FileNameSave="C:\tmp\"_Filename_".zzz" s file=##class(%FileBinaryStream).%New() s file.Filename=FileNameSave While 'stream.AtEnd { set len = 4000 Set line=stream.Read(.len) if (len>0) { s lineout=##class(%SYSTEM.Encryption).Base64Decode(line) d file.Write(lineout) } } d file.%Save() s Filename = "" s FileNameSave = "" s stream = "" q } } } Что не так ? какие есть предложения ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2011, 18:26 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
код надо оформлять в тег code, кто генерирует XML файл, если вы то обрамите Base64 данные в CDATA еще из них можно по удалять переводы строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2011, 19:10 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
DAiMor, Xml файлы генерируются в COS, данные записаны одной строкой не содержат переводов строк, проверял в делфи конвертирова обратно и получал файл а яснее можно про обрамление в сдата ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2011, 19:27 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
Zaour, попробуйте классы %XML.Reader, %XML.Writer, оно того стоит. Как пример оформления классов можно глянуть тут: http://www.sql.ru/forum/actualthread.aspx?tid=814407 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2011, 20:23 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
Zaourа яснее можно про обрамление в сдата ? Данные содержащие спецсимволы нужно совать в специальный контейнер Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2011, 20:24 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
Блок А.Н., пробовал и с %XML.Reader он по моему вообще с нодами содержащими больше 32кб работать не умеет, GetText(.tmp) метод возвращает только стринг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2011, 12:12 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
krvsa, в спец контейнер совать не могу потому что этот xml файл будут читать еще вне Cache, какие еще будут предложения ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2011, 12:14 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
Zaour, CDATA - это не выдумка каше, а используется в XML , следовательно внешний парсер должен о нем знать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2011, 12:48 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
Zaourкакие еще будут предложения ? Таки попробовать с контейнером... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2011, 12:51 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
CDATA, это нормально для XML, и если на той стороне нормальный парсер, то он прочитает и с CDATA для данных более 32 кб, включите поддержку длинных строк, без этой поддержки строки более 32кб обрабатывать нельзя а Base64Decode работает только со строками ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2011, 12:51 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
Еще, если все-таки пихать картинки в строку, то там есть такой параметр MAXLEN, можно попробовать его увеличить. Ну и поддержку длинных строк наверно нужно включить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2011, 13:05 |
|
||
|
Node в Xml содержащий более 32кб в формате base64 ?
|
|||
|---|---|---|---|
|
#18+
Спасибо за советы и подсказки, нашел еще один выход, воспользовался Sax parser-ом , создал свой ContentHanlder указал в нем складывать данные в stream. и включил этот handler в метод ParseFile Sax.parser-a и получил свой stream object содержащий полные данные. Теперь, как эффективней избавиться от переводов строк и пробелов , на случай если данные base64 все-таки будут содержать их ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2011, 15:43 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=37156242&tid=1557796]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
153ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 487ms |

| 0 / 0 |
