Недавно я работал над довольно скромным приложением, в котором перечислены контакты. Когда щелкают ссылку-ссылку, появляется всплывающее окно с более подробной информацией и изображением этого контакта.
Таблица, на которой это основывалось, содержала столбец photo_reference, который содержал путь к папке в / i /. С этой настройкой было легко получить изображения, работающие для каждого контакта.
Показанное мною всплывающее окно представляло собой набор html-кода, который я поместил в нижний колонтитул региона и спрятал.
<div id="contact_popup" class="contact_pop">
<div class="contact_pop_imgcontainer">
<img id="id_photo" class="contact_pop" />
</div>
</div>
Когда щелкнули детали, я получил данные через процесс приложения и показал модальное диалоговое окно этого контейнера.
Теперь область действия изменилась: пользователи должны иметь возможность загружать свои собственные изображения. Итак, я пошел на работу и сделал так, чтобы изображения загружались в wwv_flow_files, а затем я перемещаю их в новую таблицу contact_image. Все идет нормально. Но сейчас я хочу показать эти картинки, и здесь я застрял.
* Я мог бы включить столбец в свой IR, и наложить маску в формате BLOB с изображением. У меня это работает, но досадно. Моя таблица изображений имеет в качестве первичного ключа поле «ID». Моя таблица контактов также имеет «ID» как PK.
Поскольку IMAGE:APXT_CONTACTS_IMG:SMALL_PHOTO:ID::::::inline:
указывает идентификатор в качестве PK, он использует идентификатор из моей таблицы контактов.
Моя ссылка между таблицами APXT_CONTACTS.CONTACT_IMAGE_ID -> APXT_CONTACTS_IMG.ID
.
Способ, которым я мог бы заставить это работать, состоит в том, чтобы переименовать мое поле идентификатора в таблице изображений к contact_image_id. (почему нельзя форматировать маску, просто возьмите в качестве значения столбец, на котором она основана :().
Затем я могу скрыть столбец и взять изображение с JavaScript, чтобы показать в моем всплывающем окне. Тем не менее, это предварительно загружает все изображения для количества выбранных строк, что не совсем плохо, но я сначала ищу альтернативу.
get_blob_file_src также кажется мне бесполезным из-за ограниченного использования параметров (элемент просмотра файла, поле id), и даже тогда, могу ли я использовать это через обратный вызов ajax?
Я бы предпочел получить изображение с помощью ajax, чтобы потом отображать его в моем всплывающем окне, но я понятия не имею, как это сделать. Я сделал хранимую процедуру, которая получает файл для загрузки и вызывает его из процесса приложения (обратный вызов ajax), и с помощью firebug я могу увидеть сообщение / ответ, но я не знаю, как отобразить это как изображение .
Javascript:
function cimg(){
var get = new htmldb_Get(null, &APP_ID., "APPLICATION_PROCESS=get_img", &APP_PAGE_ID.);
get.addParam('x01', 25);
var greturn = get.get();
alert(greturn);
var pic = new Image();
pic.onload = function(){
document.body.appendChild(pic);
};
pic.src = greturn;
};
Процесс страницы:
begin
show_small_photo(apex_application.g_x01);
end;
Хранимая процедура:
create or replace procedure "SHOW_SMALL_PHOTO"
(p_contact_image_id IN NUMBER)
is
v_mime apxt_contacts_img.mime_type%type;
v_length NUMBER;
v_filename apxt_contacts_img.filename%type;
v_lob BLOB;
begin
SELECT mime_type, lengthb(small_photo), filename, small_photo
INTO v_mime, v_length, v_filename, v_lob
FROM apxt_contacts_img
WHERE id = p_contact_image_id;
OWA_UTIL.mime_header (NVL (v_mime, 'application/octet'), FALSE);
HTP.p ('Content-length: ' || v_length);
-- needed?
--HTP.p ('Content-Disposition: attachment; filename="'||v_filename||'"');
OWA_UTIL.http_header_close;
wpg_docload.download_file (v_lob);
end;
(Я бы предпочел не предоставлять исполнению public и вызывать хранимую процедуру по ссылке.)
Таким образом, мне нужно было загружать только картинки по ссылкам. Хотя этот код не работает. Я получаю предупреждение и вижу кучу этих странных персонажей, так что я предполагаю, что это болтовня. Но я нигде не получаю изображение.
Я что-то упустил? Делать что-то не так? Я совершенно не в курсе.
Вместо моего существующего кода я мог бы заставить эту работу создать другую страницу и перетаскивать элементы страницы и их значения, чтобы попытаться создать такой же макет, а затем получить эту страницу через ajax?
В основном я пытаюсь свести к минимуму влияние (= работы) на существующее приложение, поэтому мне не придется снова менять страницы.
TL; DR: возможно ли получить и отобразить блоб изображения из таблицы, отсутствующей в запросе отчета, предпочтительно через ajax?
Это Apex 4,02 на 11 г дБ
Спасибо,
Том