Единый md-файл со всеми изображениями

21-09-2026Время чтения ~ 5 мин.Albireo CMS 16

В Albireo CMS версии 2026.09.19 я добавил возможность загружать md-файл, который содержит сразу все данные. То есть теперь можно хранить все файлы изображений в одном-единственном md-файле (например в Обсидиане).

Единый md-файл со всеми изображениями

Хранение файлов изображений

Многие сталкивались с проблемой: если при оформлении статьи нужны изображения, то возникает проблема как и где их хранить. Если взять, скажем Word или Libre Office, то все изображения хранятся прямо внутри файла вместе с текстом. Но если взять md-файл или любой другой текстовый формат, то файлы изображений приходится хранить отдельно, а в тексте просто указывать ссылку.

Если взять за основу Obsidian, то по умолчанию все изображения хранятся в отдельном каталоге attachement, соответственно в тексте будет вставка такого вида:

![подсказка](attachement/myimage.webp)

Поэтому, когда мы хотим поделиться md-файлом, то нужно не забыть передать и папку attachement.

Albireo CMS и md-файлы

В моей системе уже давно можно загрузить md-файл, который будет обработан и превращён в полноценный php-файл.

Но вот что касается изображений, то их приходилось загружать отдельно и потом линковать в тексте. Это не очень удобно.

Data-атрибуты

Если мы хотим хранить всё в едином md-файле, то нужно решить как именно это сделать. К сожалению нет никакого стандарта на этот счёт. Самый оптимальный вариант был бы как в fb2, где все загружаемые файлы сохранялись бы в конце текстового файла. Сам файл следует кодировать через base64, чтобы безопасно работать с его бинарными данными.

Если бы Obsidian хоть в какой-то форме поддерживал такую возможность, я бы использовал её, но нет, программа воспринимает md-файл ровно как текст без каких-то вложений.

Тогда я понял, что лучшим вариантом будет это использование стандартного подхода для HTML — использование data:image. В тексте это будет выглядеть так:

![подсказка](data:image/webp;base64,... тут данные ...)

Albireo CMS, поддерживает этот формат и, как оказалось, Obsidain также корректно с ним работает. Поэтому остался организационный вопрос как удобно включать данные изображений в исходный md-файл.

Первый способ: плагин Image Baker

Плагин для Obsisdan'а Image Baker позволяет преобразовывать файлы изображений в виде data-вставки. Поскольку код получается большой, то плагин его сворачивает в компактный вид, что делает текст вполне читабельным.

Также плагин позволяет автоматически конвертировать изображения в Webp-формат, что часто позволяет уменьшить его объём. При необходимости можно сконвертировать старые img-вставки в data-атрибут.

Минус только в том, что Obsidian не очень хорошо приспособлен для работы с большими текстами. Если добавить несколько изображений, то md-файл может быть 100-200 КБ. Обсидиан при этом начинает заметно притормаживать (особенно если включено много других плагинов).

Второй способ: плагин Export as Base64 MD

Другой способ — это работа с файлами как обычно, а когда нужно перенести файл с вложенными файлами, делается отдельный экспорт.

Плагин Export as Base64 MD создаёт новый md-файл со всеми data-атрибутами. Для этого нужно нажать Ctrl+P (командная панель) и выбрать «Export as Base64 MD: Export active note». Откроется файловая панель, где нужно указать имя итогового md-файла.

Этот md-файл уже легко экспортируется в Albireo CMS.

Экспорт в Albireo CMS

Когда происходит экспорт такого md-файла в Albireo CMS, система автоматически найдёт все вхождения data-атрибутов и вычленит их для последующего сохранения. Вместо data-атрибутов появится стандартная ссылка на файл. Например так:

![подсказка](//myimage.webp)

Поскольку имя файла не передаётся в data-атрибутах, то система использует довольно простой алгоритм.

Вначале смотрится поле images-dir, например так:

images-dir: [UPLOADS_URL]2026

Дальше происходит привязка к имени md-файла. Здесь два варианта: если есть поле page-on-website, то используется именно оно, а если нет, то привязка к загружаемому файлу.

Например если нет поля page-on-website, а загружаемый файл welcome.md, то Albireo CMS будет использовать welcome как базовое имя:

![подсказка](//2026/welcome.webp)
![подсказка](//2026/welcome-хэш1.webp)
![подсказка](//2026/welcome-хэш2.webp)
![подсказка](//2026/welcome-хэш3.webp)

То есть первый файл в тексте будет сохранен в каталоге images-dir с именем равным имени md-файла. Все последующие файлы изображений будут сохранены с тем же именем, но с добавлением хэша.

Такая схема позволяет загружать и перезаписывать md-файл сколько угодно раз и гарантировать что имена файлов будут совпадать.

Если же есть поле page-on-website, то будет использовано оно (последняя часть). Например файл my-page42.md:

# исходный файл не совпадает с тем, что будет на сервере
page-on-website: 2026/hello

images-dir: [UPLOADS_URL]2026
image-large: attachement/%%SLUG%%.webp

На сервере этот md-файл сохранится как 2026/hello.php. Изображения будут такими:

![подсказка](//2026/hello.webp)
![подсказка](//2026/hello-хэш1.webp)
![подсказка](//2026/hello-хэш2.webp)
![подсказка](//2026/hello-хэш3.webp)

Поле image-large автоматически заменится на:

image-large: [UPLOADS_URL]2026/hello.webp

То есть здесь произойдёт полная замена имен файлов согласно имени поля page-on-website.

Безопасность

Отдельно отмечу, что Albireo CMS автоматически проверяет data-содержимое. Сохраняться будут только реальные webp, jpg или gif данные. Также система автоматом проверит вставки php-кода. Если данные некорректные, то система оставит их как есть.

Итого

Использование новой возможности Albireo CMS позволит публиковать записи на сайте через один-единственный файл экспорта. Это очень удобно, поскольку закрывается вопрос организации дополнительных файлов изображений. Если вы привыкли к Obsidian'у, как к основному текстовому редактору, то теперь публиковать записи блога будет намного проще.

Похожие записи
Оставьте комментарий!