powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Проблема с показом изображений
24 сообщений из 24, страница 1 из 1
Проблема с показом изображений
    #37724941
anykeycheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знаю что вопрос уже обсуждался, но похожие темы не помогли решить проблему.
Имеется Oracle11g xe с Апексом.
Пытаюсь вывести картинки в отчете и html-регионе(<img src="#OWNER#.MY_IMAGE_DISPLAY?p_image_id=82" />) как у Кубисека( http://htmldb.oracle.com/pls/otn/f?p=31517:64:1321460433089501::NO), но получается только так:

Помогите разобраться пожалуйста в чем проблема.

Таблица:
CREATE TABLE "PICTABLE"
( "ID" NUMBER NOT NULL ENABLE,
"MYFILE" BLOB,
"FILENAME" VARCHAR2(255),
"MIMETYPE" VARCHAR2(255),
"FILEDATE" DATE,
"DESCRIPTION" VARCHAR2(255),
CONSTRAINT "PICTABLE_PK" PRIMARY KEY ("ID") ENABLE
) ;

Процедура вывода изображения:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
create or replace PROCEDURE my_image_display(p_image_id IN NUMBER)
AS
   l_mime        VARCHAR2 (255);
   l_length      NUMBER;
   l_file_name   VARCHAR2 (2000);
   lob_loc       BLOB;
BEGIN
   SELECT MIMETYPE, MYFILE, FILENAME, DBMS_LOB.getlength (MYFILE)
     INTO l_mime, lob_loc, l_file_name, l_length
     FROM PICTABLE
    WHERE ID = p_image_id;

   OWA_UTIL.mime_header (NVL (l_mime, 'application/octet'), FALSE);
   HTP.p ('Content-length: ' || l_length);
   OWA_UTIL.http_header_close;
   WPG_DOCLOAD.download_file (lob_loc);
END my_image_display;



Привилегия и синоним созданы:
GRANT EXECUTE ON my_image_display TO PUBLIC;
CREATE PUBLIC SYNONYM my_image_display FOR shema_name.my_image_display;

Region Sourse:
select * from (
SELECT SUBSTR (FILENAME, INSTR (FILENAME, '/') + 1) FILENAME,
'<img src="#OWNER#.my_image_display?p_image_id='
|| NVL (ID, 0)
|| '" height="'
|| 100
|| '" width="'
|| 150
|| '" />' img,
TO_CHAR (ID) id
FROM PICTABLE)
where (
instr(upper("FILENAME"),upper(nvl(:P1_REPORT_SEARCH,"FILENAME"))) > 0 or
instr(upper("IMG"),upper(nvl(:P1_REPORT_SEARCH,"IMG"))) > 0 or
instr(upper("ID"),upper(nvl(:P1_REPORT_SEARCH,"ID"))) > 0
)
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37724997
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anykeycheg,

Вам обязательно пользоваться именно этой процедурой?

Пожалуйста, посмотрите приложение Sample Database Application - обычно идет в поставке. В этом приложении страницы №3 (Products) и №6 (Products Details).
На этих страницах выводятся список продуктов с фотографией (обратите внимание, что есть представление в виде таблицы, иконок и хитрого списка), а так же ввод этого продукта и фотографии.
Внутри этого способа используется другая хранимая процедура, но уже входящая в пакет поставки.
(Это если у Вас Apex 4 и выше)
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37725076
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anykeycheg,

В Вашем случае попробуйте еще поиграть с отображением столбца:
в разделе Report Arritbutes, в пункте Column Attributes напротив столбца укажите в Display Text As значение Standart Report Column. (Скорее всего сейчас стоит Display as Text (excape special characters)
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37725321
anykeycheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emdidemdidanykeycheg,
Вам обязательно пользоваться именно этой процедурой?
(Это если у Вас Apex 4 и выше)
Необязательно, но должна же работать. 4 Apex
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37725333
anykeycheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emdidemdidanykeycheg,

В Вашем случае попробуйте еще поиграть с отображением столбца:
в разделе Report Arritbutes, в пункте Column Attributes напротив столбца укажите в Display Text As значение Standart Report Column. (Скорее всего сейчас стоит Display as Text (excape special characters)
Сделал StandartReportColumn - показывает пустые картинки размерностью 100 на 150.
html-регион без всякого форматирования должен показывать.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37725591
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему у Вас в этом месте:

anykeychegwhere (
instr(upper("FILENAME"),upper(nvl(:P1_REPORT_SEARCH,"FILENAME"))) > 0 or
instr(upper("IMG"),upper(nvl(:P1_REPORT_SEARCH,"IMG"))) > 0 or
instr(upper("ID"),upper(nvl(:P1_REPORT_SEARCH,"ID"))) > 0
)

написано что-то неразборчивое.

Попробуйте жестко задать какой-то ID, которые гарантированно есть. Скорее всего у Вас изображение выведется.

Пустые картинки - это значит функция ничего не смогла извлечь из базы. Все отработано верно.

Теперь вопрос с другой стороны: а каким образом Вы заложили изображение в базу. (А есть ли оно у Вас там и почему Вы так считаете).
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37725598
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anykeycheg но должна же работать.

Оно работает. Я именно по сайту Кубичека делал это на Apex 3.2. Выводилось успешно.
Просто это вторая часть Марлезонского балета. Первая часть - правильно заложить картинку в базу.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37726678
anykeycheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делал загрузку картинок по примеру: http://applicationexpress.ru/apex-lessons/17-apex-lesson-13.html
таблица:
CREATE TABLE "PICTABLE"
( "ID" NUMBER NOT NULL ENABLE,
"MYFILE" BLOB,
"FILENAME" VARCHAR2(255),
"MIMETYPE" VARCHAR2(255),
"FILEDATE" DATE,
"FILECHARSET" VARCHAR2(255),
"DESCRIPTION" VARCHAR2(255),
CONSTRAINT "PICTABLE_PK" PRIMARY KEY ("ID") ENABLE
) ;

Создал Report and Form. В репорте в Report Attributes в поле MYFILE прописал маску Number / Date Format:
IMAGE:PICTABLE:MYFILE:ID::MIMETYPE:FILENAME:FILEDATE:FILECHARSET:inline:Download

В форме ввода в итеме P2_MYFILE поставил такие настройки:

Картинки прекрасно загружаются, но при попытке вывода процедурой в HTML-регионе (<img src="#OWNER#.my_image_display?p_image_id=3" />) ничего не показывает:
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37729096
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anykeychegно при попытке вывода процедурой в HTML-регионе (<img src="#OWNER#.my_image_display?p_image_id=3" />) ничего не показывает

Пожалуйста, посмотрите HTML код данного региона в готовой странице. Внутренний телепат говорит, что там будет написано именно <img src="#OWNER#.my_image_display?p_image_id=3" /> . То есть буквально то, что Вы указали региону.
Теперь вопрос: заменится ли #OWNER# на нужную схему.
Так как есть синоним этой процедуры на PUBLIC, попробуйте просто опустить #OWNER#.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37729337
anykeycheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emdidemdidanykeychegно при попытке вывода процедурой в HTML-регионе (<img src="#OWNER#.my_image_display?p_image_id=3" />) ничего не показывает

Пожалуйста, посмотрите HTML код данного региона в готовой странице. Внутренний телепат говорит, что там будет написано именно <img src="#OWNER#.my_image_display?p_image_id=3" /> . То есть буквально то, что Вы указали региону.
Теперь вопрос: заменится ли #OWNER# на нужную схему.
Так как есть синоним этой процедуры на PUBLIC, попробуйте просто опустить #OWNER#.
Не помогло. Похожая проблема обсуждается в 6171638 , что-то связанное с функцией flows_030100.wwv_flow_epg_include_mod_local.
Буду копать про нее.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37729361
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anykeycheg,

Так что конкретно выводилось в HTML коде региона?
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37729398
anykeycheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кусок html:


Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
</div><div class="rounded-corner-region" id="R7816020276921544" >
  <div class="rc-blue-top"><div class="rc-blue-top-r">
    <div class="rc-title">HTML</div>
    <div class="rc-buttons"></div>
  </div></div>
  <div class="rc-body"><div class="rc-body-r"><div class="rc-content-main"><img src="MY_IMAGE_DISPLAY?p_image_id=3"/></div></div></div>
  <div class="rc-bottom"><div class="rc-bottom-r"></div></div>
</div></td>
        <td class="tbl-sidebar"></td>     
      </tr>
    </tbody>
  </table>
</div><div id="footer"><div class="content">



Смотрел в просмотрщике html Хрома, выделил процедуру MY_IMAGE_DISPLAY и появилось сообщение:
Not found
The requested URL /apex/MY_IMAGE_DISPLAY was not found on this server
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37729506
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anykeycheg,

Попробуйте вписать название схемы явно.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37729595
anykeycheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тоже не выходит. Процедура валидная,

begin
MAGDBA.my_image_display(21);
end;

отрабатывает, может подскажете пожалуйста как проверить другим способом?
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37729603
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anykeycheg,

Попробуйте добавить стандартный элемент показа картинки. По-моему его можно настроить просто на BLOB. (Этот BLOB может возвращать запрос с параметром). Тогда размер картинки задавать в атрибутах.
Сообщите результат, если получится.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37729642
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anykeycheg,

Вот еще можно подергать wwv_flow_epg_include_mod_local

В этих ссылках:
http://dancingwithapex.blogspot.com/2010/01/calling-stored-procedures-from-apex.html
http://www.adp-gmbh.ch/ora/plsql_gateway/ex_1.html


И проверить в админских настройках о возможности вызова хранимой процедуры из строки браузера. Что-то смутно вспоминаю такую галку. (Или выдумываю)
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37730755
anykeycheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emdidemdidanykeycheg,
Попробуйте добавить стандартный элемент показа картинки. По-моему его можно настроить просто на BLOB. (Этот BLOB может возвращать запрос с параметром). Тогда размер картинки задавать в атрибутах.
Сообщите результат, если получится.
Так работает.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37730833
anykeycheg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
emdidemdid, большое Вам спасибо
С помощью http://www.adp-gmbh.ch/ora/plsql_gateway/ex_1.html решил проблему.
Под system в пользователе apex_040000 поменял функцию:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
create or replace
function                         wwv_flow_epg_include_mod_local(
    procedure_name in varchar2)
return boolean
is
begin
  --  return false; -- remove this statement when you modify this function
    --
    -- Administrator note: the procedure_name input parameter may be in the format:
    --
    --    procedure
    --    schema.procedure
    --    package.procedure
    --    schema.package.procedure
    --
    -- If the expected input parameter is a procedure name only, the IN list code shown below
    -- can be modified to itemize the expected procedure names. Otherwise you must parse the
    -- procedure_name parameter and replace the simple code below with code that will evaluate
    -- all of the cases listed above.
    --
    if upper(procedure_name) in (
          'MAGDBA.MY_IMAGE_DISPLAY', 'MAGDBA.SHOW_TABLE' ) then
        return TRUE;
    else
        return FALSE;
    end if;
end wwv_flow_epg_include_mod_local;



и дал права
Код: plsql
1.
grant execute on apex_040000.wwv_flow_epg_include_mod_local to anonymous;
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37730860
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
anykeycheg,

Всегда пожалуйста!

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

Настоятельно рекомендую решить задачу еще раз только стандартным путем. Как указано в тестовом приложении Sample Database Application - обычно идет в поставке. В этом приложении страницы №3 (Products) и №6 (Products Details).
На этих страницах выводятся список продуктов с фотографией (обратите внимание, что есть представление в виде таблицы, иконок и хитрого списка), а так же ввод этого продукта и фотографии.
Я предпочитаю следовать рекомендациям авторов системы.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37731471
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emdidemdid,

1. anonymous не левый пользователь :)
2. способ не левый, а документирован
RTFM Restricting Access to Oracle Application Express by Database Access Descriptor (DAD)

Но способ плох тем, что зависит от сценария установки.
Поэтому соб-но предпочитаю вызывать WPG_DOCLOAD не в public function, а в page/application process.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37731659
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevemdidemdid,

1. anonymous не левый пользователь :)
2. способ не левый, а документирован
RTFM Restricting Access to Oracle Application Express by Database Access Descriptor (DAD)

Но способ плох тем, что зависит от сценария установки.
Поэтому соб-но предпочитаю вызывать WPG_DOCLOAD не в public function, а в page/application process.

1. Наверное не левый (я читал в документации кто это), но какой-то вялый. Изначально ему этих прав не выдали. Видимо, были какие-то объективные причины.
2. Если внимательно прочитать Sample Application, то можно обойтись без всяких плясок с бубном. Для этого достаточно воспользоваться специально для этого созданной процедурой из общедоступного пакета.

Чем указанная выше процедура лучше или хуже процедуры apex_util.get_blob_file_src из стандартной поставки apex?

PS Очень сильно не люблю велосипеды. Не нужно чинить то, что не поломалось.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37732012
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emdidemdidЕсли внимательно прочитать Sample Application, то можно обойтись без всяких плясок с бубном
Возможности апекса не заканчиваются на Sample Application

emdidemdidЧем указанная выше процедура лучше или хуже процедуры apex_util.get_blob_file_src из стандартной поставки apex?

Предпочитаю хранить пользовательские картинки и файлы в своих таблицах, а не в общей свалке

emdidemdidPS Очень сильно не люблю велосипеды. Не нужно чинить то, что не поломалось.
WPG_DOCLOAD - это более гибкий способ, которым можно управлять, по сравнению с apex_util.get_blob_file_src, apex_util.get_file и т.д., что мне уже пригодилось и не раз.
Еще раз, читайте документацию.

RTFM
Downloading Documents from the Custom Table

Сопутствующую документацию изучать тоже полезно
PL/SQL Packages and Types Reference
Fusion Middleware User's Guide for mod_plsql

emdidemdid1. Наверное не левый (я читал в документации кто это), но какой-то вялый. Изначально ему этих прав не выдали. Видимо, были какие-то объективные причины.
Можно использовать разные способы, не только public functions, как я уже сказал.
Нет абсолютно ничего странного в отсутствии прав на вызов любых функций через url.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37732608
emdidemdid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDevВозможности апекса не заканчиваются на Sample Application


Автор топика не указал, а я не увидел причин выходить за рамки Sample Application. Особого смысла (кроме потренироваться) во введении новой процедуры нет.
Доскональное изучение Sample Application позволяет получить ответы на 95% потребностей разработки.

SvDevemdidemdidЧем указанная выше процедура лучше или хуже процедуры apex_util.get_blob_file_src из стандартной поставки apex?

Предпочитаю хранить пользовательские картинки и файлы в своих таблицах, а не в общей свалке


Так и есть. В Sample Application изображения хранятся в собственной таблице, не в общей свалке.
Я все же отвечу, почему apex_util.get_blob_file_src лучше: она уже есть и уже описана в документации. Не нужно плодить лишние сущности.

SvDevWPG_DOCLOAD - это более гибкий способ...

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

SvDevЕще раз, читайте документацию.

RTFM
Downloading Documents from the Custom Table

Сопутствующую документацию изучать тоже полезно
PL/SQL Packages and Types Reference
Fusion Middleware User's Guide for mod_plsql


Эта документация известна. В приличных изданиях не дают ссылки на энциклопедии -- считается, что человек достаточно смышлен, чтобы самостоятельно обратиться к общедоступным сведениям.

Кстати, последний пункт первой ссылки - Security Issues to Consider (Предупреждение о безопасности)

SvDevНет абсолютно ничего странного в отсутствии прав на вызов любых функций через url.
Наверное потому что это лишняя дырка на доступ к данным. И открывать ее нужно только в особых обстоятельтсвах.

Главное в этой ветке: автор топика получил исчерпывающий ответ на свой конкретный вопрос, а так же узнал другие пути движения. А остальное - почему бы и не поговорить с умными людьми.
...
Рейтинг: 0 / 0
Проблема с показом изображений
    #37733460
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
emdidemdidТак и есть. В Sample Application изображения хранятся в собственной таблице, не в общей свалке.
Действительно, я уже и забыл.

Тем не менее мне кажется некоторые нюансы не поняты до конца, поэтому я поясню.

1. авторgrant execute on apex_040000.wwv_flow_epg_include_mod_local to anonymous;
wwv_flow_epg_include_mod_local вызывается из wwv_flow_epg_include_modules.authorize, которая выполняется под правами собственника. У собственника уже есть права на свои процедуры. Даже если был drop procedure wwv_flow_epg_include_mod_local
грант лишний.

Соответственно, нужен только грант на вызываемые через url функции для anonymous, под которым ходит epg. Это логично и не добавляет уязвимостей, если только программист сам их не наделает в своих функциях.

2. Глава Security Issues to Consider относится ко всем методам. Если в приложении есть хоть одна страница, достаточно набрать
p?n=file_id чтобы получить доступ ко всем файлам из wwv_flow_files. Если интересует безопасность, то знать о механизме вызова функций через url необходимо, и тогда никаких танцев с бубном нет. Хотя я лично конкретно wwv_flow_epg_include_mod_local не использую.

3. apex_util.get_blob_file_src не такая пушистая и не в полной мере документирована. Требует для себе item/Automated Row Fetch/Automatic Row Processing, слишком много для Downloading Blob from the Custom Table, как её использовать с WWV_FLOW_FILES вообще не понятно (использую p?n= ). Я уже не говорю про баги с кириллицей в названиях файлов для некоторых браузеров (FF/opera/...).

Тут каждый метод имеет ряд недостатков, лично мой выбор для wwv_flow_files использовать p?n и apex_util.get_file.
Для custom table (приоритетнее) wpg_docload в page process.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Проблема с показом изображений
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]