Struts 2 — перехватить загрузку файла изображения с помощью CKEditor

У меня есть CKEditor на разных страницах сайта, поэтому я настроил загрузку на true и все настройки, чтобы он работал, и загрузка изображения работала нормально для вкладки "Send it to the Server". Но отсюда я хочу перехватить или взаимодействовать с функцией upload, чтобы иметь возможность загружать изображения не в папку, а в базу данных с некоторыми флагами, такими как "page", где загружается изображение, "category", "cropping" и некоторые другие манипуляции с ними.

Итак, как это можно сделать, чтобы перехватить эти загрузки?

Мне было любопытно, и я обнаружил, что действие по умолчанию для загрузки

/%project_name%/ckeditor/upload.html?CKEditor=textarea_1457018535&CKEditorFuncNum=2&langCode=en 

и действие для этой загрузки: CkeditorUpload.java, но я не понимаю, как их использовать дальше.


person Denees    schedule 23.11.2013    source источник
comment
Перехватить не получится, значит перехватчик для него писать не надо. Но надо написать реализацию. Что вы пробовали?   -  person Roman C    schedule 23.11.2013
comment
Под перехватом я не имел в виду писать перехватчик, а ПЕРЕХВАЧИВАТЬ это действие загрузки, независимо от того, является ли оно запросом AJAX, действием Struts или чем-то еще.   -  person Denees    schedule 24.11.2013
comment
Вы имеете в виду, что intercept должен обойти выполнение действия или что?   -  person Roman C    schedule 24.11.2013
comment
хм, не столько обойти, сколько перезаписать (переопределить) его   -  person Denees    schedule 24.11.2013


Ответы (1)


Что ж, если вы хотите переопределить его, вы должны начать переопределять метод execute из класса действий выше. Также переопределите конфигурацию, заменив ссылку на класс в конфигурации действия. Дело в том, что исходная реализация создает FileOutputStream, которую следует заменить на ByteArrayOutputStream. Затем пусть записывает в поток байтового массива и getBytes() из него даст вам byte[] data. Сохраните эти данные в базе данных. Вы также можете прочитать этот ответ поможет вам это сделать или это руководство объяснит вам, как это сделать в Hibernate. Затем код, в котором действие записывает HTML, изменяет путь к диску на путь действия /uploads, сопоставленный с действием, которое извлекает изображение из базы данных. Пример ImageAction вы можете найти здесь. Этот ответ также будет полезен.

person Roman C    schedule 24.11.2013
comment
Спасибо за это. Единственный момент, который я хочу знать, это как взаимодействовать с загрузкой изображения CKEditor, в остальном у меня нет проблем с сохранением его в базе данных, но все равно спасибо. Стек по умолчанию в моей конфигурации имеет ‹interceptor-ref name=fileUpload/›, как мне теперь получить оттуда данные? или мне нужно настроить какой-то слушатель? - person Denees; 24.11.2013
comment
Свойство upload должно быть заполнено этим перехватчиком. - person Roman C; 24.11.2013
comment
Я думаю, что не могу правильно понять вашу идею, мне трудно понять, что вы пытаетесь сказать, извините за это. - person Denees; 24.11.2013
comment
Может быть, это объясняет лучше? Как взаимодействовать, вы использовали их витрину? Свойства изображения содержат вкладку «Загрузка», и вы можете загрузить его на сервер с помощью кнопки, затем нажмите «ОК», и загруженное изображение будет связано с текстом. Я загрузил туда два изображения, и ссылки действительны, но они не показывают, почему. - person Roman C; 24.11.2013
comment
CKEditor использует свое собственное действие для загрузки файлов, которое интегрировано в саму библиотеку, у меня нет доступа к ней, если бы я это сделал, я бы никогда об этом не просил. - person Denees; 25.11.2013