Работа с сервером
RichText работает полностью в браузере и не требует бэкенда для редактирования или сохранения контента. Ваше приложение может хранить содержимое редактора там, где вам удобно. Единственная функция, которая выигрывает от наличия сервера, — загрузка изображений: когда пользователь вставляет изображение в документ, RichText может либо встроить файл непосредственно в контент, либо отправить его на HTTP-эндпоинт и сохранить ссылку на него.
В этом руководстве объясняется:
- что происходит по умолчанию, если сервер загрузки не настроен
- точный HTTP-контракт, который должен реализовать сервер
- как RichText использует URL, возвращённый сервером
- как протестировать функцию на демо-бэкенде
Поведение по умолчанию: встроенные изображения
Если вы не задаёте свойство imageUploadUrl, RichText использует встроенные изображения. Когда пользователь вставляет изображение, RichText читает файл в браузере, кодирует оригинальный файл как data:image/...;base64,... URL и записывает его непосредственно в контент редактора в виде атрибута src элемента <img/>. RichText ограничивает отображаемый размер, чтобы он вписывался в рамку 1024×800 пикселей, используя атрибуты width/height, но встроенные байты — это оригинальный файл в полном разрешении: клиент не уменьшает и не перекодирует его.
Это работает без какого-либо бэкенда и удобно для быстрых демонстраций, но имеет очевидные ограничения:
- закодированные байты хранятся внутри документа, поэтому сохранённый HTML растёт с каждым изображением
- одно и то же изображение в двух документах хранится дважды, поскольку общего ресурса для дедупликации нет
- поскольку байты не являются отдельным ресурсом, сервер не может раздавать их через CDN или постобрабатывать (изменять размер, перекодировать, сканировать)
- встроенные изображения не сохраняются при встроенном экспорте в форматы DOCX/PDF, поэтому, если вы используете экспорт, настройте сервер загрузки, чтобы изображения ссылались на внешний URL
Напишите свой сервер
В продакшн-приложениях укажите RichText адрес сервера с помощью imageUploadUrl:
new richtext.Richtext("#root", {
imageUploadUrl: "https://example.com/upload"
// другие свойства конфигурации
});
Минимальный эндпоинт загрузки должен:
- Принимать POST-запрос в формате
multipart/form-dataс полем файла, названнымupload. - Валидировать файл (допустимые типы, максимальный размер).
- Сохранять файл туда, откуда браузер пользователя сможет его получить (локальный диск, раздаваемый по HTTP, S3, CDN и т.д.).
- При необходимости изменять размер или иным образом обрабатывать изображение.
- Возвращать JSON-объект, содержащий
status: "server", полеvalueсо публичным URL сохранённого файла, а такжеwidthиheightизображения в пикселях.
Что отправляет клиент
Когда задан imageUploadUrl, RichText отправляет выбранный файл непосредственно на этот URL (не добавляет /images или другой путь), поэтому передаваемый URL является полным адресом для POST-запроса.
Запрос использует стандартную загрузку через HTML-форму:
- Метод:
POST - Content-Type:
multipart/form-data - Тело: одно поле файла с именем
upload