|
decoding clob base64 to blob
|
|||
---|---|---|---|
#18+
Всем привет. Прочитал на форуме с десяток тем по сабжу, но пока все тщетно. Основная проблема вот в чем: есть clob файл, в котором закодирован пдф файл в base64binary. Соответственно задача раскодировать и сохранить в blob. Казалось бы, все просто, но что-то не взлетает. Пробовал раскодировать двумя разными способами, но сохраненный blob после раскодировки не открывается. Пробовал раскодировать clob в онлайн декодере, вот тут Base64 Decode File , просто вставив содержимое из clob'a, получил на выходе корректный pdf, который даже открывается. первый способ перекодировки Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
второй способ перекодировки Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Если сравнивать файл из онлайн декодера и файл, полученный первым способом, то первые 23 тысячи символов совпадают, а потом начинается каша. Второй способ формирует blob, который даже и близко не похож на файл из онлайн декодера. Из тем на форуме понял только, что рвать base64-данные на куски произвольным образом не очень хорошая идея, но что с этим делать, пока не догнал. Собственно, может знает кто, почему закодированный pdf файл не хочет раскодироваться штатными оракловыми средствами? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 11:25 |
|
decoding clob base64 to blob
|
|||
---|---|---|---|
#18+
mlc, Сейчас понял, что второй способ просто конвертирует clob в blob, не декодируя при этой содержимое. Но вопрос по врежнему остается - почему первый способ тогда не работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 14:00 |
|
decoding clob base64 to blob
|
|||
---|---|---|---|
#18+
mlcпочему первый способ тогда не работает. Потому что в нём баг. Или даже целая пачка. Начнём с того, что размер буфера должен делиться на три без остатка. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 14:46 |
|
decoding clob base64 to blob
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Начнём с того, что размер буфера должен делиться на три без остатка. Виноват, опять маразм. Делиться надо на четыре, так что с по крайней мере размером у буфера всё нормально. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 14:59 |
|
decoding clob base64 to blob
|
|||
---|---|---|---|
#18+
1. Способ определения количества чтений странный. Полагается на то, что буфер всегда прочитается на полный размер и условие цикла вычисляется только однажды. Лучше читать пока не получишь NO_DATA_FOUND. 2. Размер буфера не восстанавливается до исходной величины перед следующим чтением. 3. Временный блоб не закрывается из-за чего следующее содержимое дописывается в уже существующий блоб. 4. Смещение не восстанавливается перед обработкой следующего блоба. Это должно сходу выбрасывать исключение, но, похоже, у тебя с таблице всего одна запись. В общем, отлаживайся, проверяй что каждый кусок читается, декодируется и дописывается корректно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 15:20 |
|
decoding clob base64 to blob
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Спасибо, попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 16:12 |
|
decoding clob base64 to blob
|
|||
---|---|---|---|
#18+
Все оказалось гораздо прозаичнее, чем можно себе представить. Знал бы матчасть, не троил бы. В данном контексте я не учел, как формируется и передается вложение в рамках BASE64 и MIME . https://en.wikipedia.org/wiki/Base64#MIME MIME does not specify a fixed length for Base64-encoded lines, but it does specify a maximum line length of 76 characters . Additionally it specifies that any extra-alphabetic characters must be ignored by a compliant decoder, although most implementations use a CR/LF newline pair to delimit encoded lines. base64#MIME Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Соответственно и мой CLOB имеет символы перевода строки CHR(10). Если его не убирать и декодировать с ним, то имеем то, что имеем. При декодировании необходимо убрать все лишние переводы строк и потом уже декодировать: решение Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2020, 18:09 |
|
|
start [/forum/topic.php?fid=52&fpage=39&tid=1881000]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 147ms |
0 / 0 |