powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / How to Upload and Download Files in an Application
7 сообщений из 7, страница 1 из 1
How to Upload and Download Files in an Application
    #35692448
A34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
A34
Гость
Есть таблица вида :
авторdesc r2docs
Name Null? Type
----------------------------------------- -------- ---------------------
ID NOT NULL NUMBER
NAME NOT NULL VARCHAR2(256)
MIME_TYPE VARCHAR2(128)
DOC_SIZE NUMBER
DAD_CHARSET VARCHAR2(128)
LAST_UPDATED DATE
CONTENT_TYPE VARCHAR2(128)
USERID NUMBER
BLOB_CONTENT BLOB
Есть PL/SQL процедура, которая заливает в нее данные.
Прочитал то, что написано по ссылке
http://download.oracle.com/docs/cd/B31036_01/doc/appdev.22/b28839/up_dn_files.htm#CIHCFCHF
И поступил так как там советуют.
Сделал процедуру для выгрузки файла из таблицы.
Код: plaintext
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.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
PROCEDURE DOWNLOAD_MY_FILE(p_file in number) AS
        v_mime  VARCHAR2( 48 );
        v_length  NUMBER;
        v_file_name VARCHAR2( 2000 );
        Lob_loc  BLOB;
BEGIN
       
      APEX_APPLICATION.G_FLOW_ID :=  106 ;

      IF NOT wwv_flow_custom_auth_std.is_session_valid then
    -- 
    -- 
    -- display this message or a custom message. 
    -- 
     htp.p('Unauthorized access - file will not be retrieved.'); 
    -- 
    -- You can do whatever else you need to here to log the
    --     unauthorized access attempt, get the requestor's
    --     IP address, send email, etc. 
    -- 
         RETURN;
      END IF;

       
       
       
        SELECT MIME_TYPE, BLOB_CONTENT, name,DBMS_LOB.GETLENGTH(blob_content)
                INTO v_mime,lob_loc,v_file_name,v_length
                FROM r2docs
                WHERE id = p_file;
              --
              -- set up HTTP header
              --
                    -- use an NVL around the mime type and
                    -- if it is a null set it to application/octect
                    -- application/octect may launch a download window from windows
                    owa_util.mime_header( nvl(v_mime,'application/octet'), FALSE );

                -- set the size so the browser knows how much to download
                htp.p('Content-length: ' || v_length);
                -- the filename will be used by the browser if the users does a save as
                htp.p('Content-Disposition:  attachment; filename="'||replace(replace(substr(v_file_name,instr(v_file_name,'/')+1),chr(10),null),chr(13),null)|| '"');
                -- close the headers
                owa_util.http_header_close;
                -- download the BLOB
                wpg_docload.download_file( Lob_loc );
end download_my_file;

Далее сделал report - регион на странице.
report-source:
Код: plaintext
SELECT s.id,s.name FROM r2docs s
далее создал в report-е URL :
Код: plaintext
#OWNER#.download_my_file?p_file=#ID#
далее сделал
Код: plaintext
GRANT EXECUTE ON download_my_file TO PUBLIC

Запустил приложение, нажал на линк в report-е .
И получил :
авторForbidden
You don't have permission to access /pls/apex/APEX_TEST.download_my_file on this server.

--------------------------------------------------------------------------------

Oracle-Application-Server-10g/10.1.2.0.0 Oracle-HTTP-Server Server at v890 Port 7778

Подскажите пожалуйста - где я ошибся ? Что не так сделано ?
...
Рейтинг: 0 / 0
How to Upload and Download Files in an Application
    #35692742
A34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
A34
Гость
в дополнение к предыдущему посту.
В логе /apps/oracle10_http/Apache/modplsql/logs/_pls_apex
увидел следующие строки :
<1392262552 ms>(wpd.c,2534) attempt to call forbidden procedure!
<1392262552 ms>DMS Logging: Unable to establish SQL error code for error: It is forbidden to call this procedure directly from the browser!
<1392262552 ms>/pls/apex/APEX_TEST.download_my_file HTTP-403 It is forbidden to call this procedure directly from the browser!

Как разрешить запускать подобные процедуры из броузера ?
...
Рейтинг: 0 / 0
How to Upload and Download Files in an Application
    #35692953
A34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
A34
Гость
Всё - нашел решение.

В свойствах DAD есть параметр PlsqlRequestValidationFunction (request-validation-function дял Embedded PL/SQL Gateway)
его значение по умолчанию wwv_flow_epg_include_modules.authorize . Из этого пакета вызывается
функция - flows_030100.wwv_flow_epg_include_mod_local. Пришлось в ней прописать свою процу
и все заработало.
Неужели это самый прямой способ ?


Спасибо лог-файлам APACHE и SQL.RU :)
...
Рейтинг: 0 / 0
How to Upload and Download Files in an Application
    #35693020
Фотография Legi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сам спросил сам ответил :)
молодец :)
...
Рейтинг: 0 / 0
How to Upload and Download Files in an Application
    #35693295
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще есть apex_util.get_blob_file_src
Хотя он тоже не совсем очевидным образом работает :)
...
Рейтинг: 0 / 0
How to Upload and Download Files in an Application
    #35694033
A34
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
A34
Гость
Ales ProtivЕще есть apex_util.get_blob_file_src
Хотя он тоже не совсем очевидным образом работает :)
А поподробнее ?
Где и что надо править ?
...
Рейтинг: 0 / 0
How to Upload and Download Files in an Application
    #35694392
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подробней некогда. Там много писать. Поищи в инете.
Я использовал это фиговину вот в этом посте: http://alp-it.blogspot.com/2008/09/apex_08.html
Может пригодится.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / How to Upload and Download Files in an Application
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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