Я исправил свою проблему за несколько часов до того, как @argo упомянул, и я сделал это таким образом. Поэтому я хотел бы немного рассказать о решении. Я также руководствовался проблемой GitHub, но не могу найти ссылку снова, в случае, если я найду ее, я отредактирую сообщение и добавлю его.
// Quill - EN content
var quillEn = new Quill('#editor-en', {
modules: {
toolbar: toolbarOptions
},
theme: 'snow'
});
// set custom image handler
quillEn.getModule('toolbar').addHandler('image', () => {
selectLocalImage(quillEn);
});
// create fake input to upload image to quill
function selectLocalImage(editor) {
const input = document.createElement('input');
input.setAttribute('type', 'file');
input.setAttribute('accept', 'image/png, image/jpeg')
input.click();
// Listen upload local image and save to server
input.onchange = () => {
const file = input.files[0];
saveImageToServer(editor, file);
};
}
// upload image to server
function saveImageToServer(editor, file) {
const fd = new FormData();
fd.append('image', file);
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api/page/upload_image', true);
xhr.onload = () => {
if (xhr.status === 200) {
// this is callback data: url
const url = JSON.parse(xhr.responseText).data;
insertToEditor(editor, url);
}
};
xhr.send(fd);
}
// manipulate quill to replace b64 image with uploaded image
function insertToEditor(editor, url) {
// push image url to rich editor.
const range = editor.getSelection();
editor.insertEmbed(range.index, 'image', url.toString());
}
В бэкэнде, где вы POST-изображение, вы должны вернуть json как { data: FullUrlToImg }
с ответом 200, если вы хотите изменить свой статус на 201 или что-то еще, не забудьте обновить его в функции saveImageToServer
.
Итак, подведем итог: вы установили пользовательский обработчик изображения для вашего редактора quill, вы отправили изображение на сервер, как только пользователь решит вставить его, а затем заменили URL-адрес загруженным изображением в редакторе.
Спасибо.