Есть много неочевидных способов хранить файлы. Вот ещё один из примерно двадцати семи.
Есть такой cпособ представления двоичного контента в виде текста: Base64.
Следовательно, любой файл можно представить в виде длинной константы типа string. Чем больше файл, тем длиннее будет строка символов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
DATA lv_base64 TYPE string. DATA lv_xstring TYPE xstring. lv_base64 = 'UEsDBBQABgAIAAAAIQCM6YyMfgEAAIwFAAAnRlbnRfVHlwZXNdLnhtbCCi2AEooAAC' && 'pBt1eSERI0lZjxXtYhzuGcOmA2ewCAP4pLyBjBtNgBRNezkvNb5oz1lDRh8jHtvaZk' && '8vZ9godfsKJKolUyquedZFFJdp5+yEHvH3ODG9fzke6typd7qeda5EIcqi5GKd27dL' && '9tclyNNJxbnjLu/4a58p/Oa/jFhQWPqE+gYwMEFAAGAAgAAAAhANZUUvOrAQAAQQMA' && 'iv7jxP56s/Zu87L95Ts5q6ihwqQw1avwiyIj/hnjnGJ+4AtVn63DdqG7gYMZvhhPUU' && 'zne1zRqIaLwr2HSSswyc9qVxm4Jdrz+evWMfaA7Fy+fiWW0QeIZACzFOGwYFuiMOcc' && 'Z3MvcHJpbnRlclNldHRpbmdzMS5iaW5QSwEAAAACEAycnEUkoBAAB1AgAAEQAAAAAA' && 'AAAAAAAAAACFHAAAZG9jUHJvcHMvY29yZS5QAUAAYACAAAACEANbpi6akBAAAzAwAA' && 'EAAAAAAAAAAAAAAAAAAGHwAAZG9jUHJvcHMFBLBQYAAAAADQANAGwDAADlIQAAAAA='. lv_xstring = cl_http_utility=>decode_x_base64( encoded = lv_base64 ). |
Вот только файл размером 10кб займёт примерно 200 строк текста.
Когда такое может пригодиться?
Например: для юнит-тестов с небольшим исходным файлом. Тестовый класс получается более самодостаточным, переносимым и независимым от внешних обстоятельств.
В моём случае инсайт пришёл при работе с Excel-файлом в моём предыдущем посте «Ещё один способ прочитать содержимое Excel-файла». Не всегда есть смысл изобретать какое-то особое место хранения файла, если можно положить файл напрямую в код.