Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Открыть файл средствами PL/SQL


Автор: SeriousMalish 2.4.2013, 09:29
Здравствуйте!
файлы лежат в таблице:
Код

CREATE TABLE WWDOC_DOCUMENT
(
  NAME          VARCHAR2(256 BYTE)              NOT NULL,
  MIME_TYPE     VARCHAR2(128 BYTE),
  DOC_SIZE      NUMBER,
  DAD_CHARSET   VARCHAR2(128 BYTE),
  LAST_UPDATED  DATE,
  CONTENT_TYPE  VARCHAR2(128 BYTE),
  CONTENT       LONG RAW,
  BLOB_CONTENT  BLOB,
  ID_OBJ        NUMBER                          NOT NULL
)

Есть HTML страница содержащая таблицу с перечнем файлов (ссылки):
Код

CREATE OR REPLACE PROCEDURE DOC_ZAYAVKA 
(
ID_Z number default null,
ID_USER number default null
)
AS
begin
htp.print('
<script language="JavaScript">
function opendocwin(id_doc)
{
opendocwin = window.open("download_doc?id_doc="+id_doc,"download_doc");
}
</script>
');
htp.htmlOpen;
htp.headOpen;
htp.print('<h1>Прикрепленные документы</h1>');
htp.headClose;
htp.bodyopen();
htp.formOpen('DOC_ZAYAVKA?id_z='||id_z||'&'||'id_user='||id_user||'',cmethod=>'POST', ctarget => '_self',cattributes=>'NAME=DOC_ZAYAVKA');
htp.tableOpen(cattributes=>'border=1 cellspacing=0 cellpadding=2 width=100% ALIGN=CENTER');
htp.tableRowOpen();
htp.tableHeader('Наименование');
for doc in 
(
select id_obj id_doc, NAME nam from WWDOC_DOCUMENT 
)
loop
htp.tableRowOpen();
htp.print('<TD><a href="javascript:opendocwin('||doc.id_doc||');">'||doc.nam||'</a></TD>');
end loop;
htp.tableclose;
htp.formclose;
HTP.BODYCLOSE;
htp.htmlclose;
end;

При переходе по ссылке, отрабатывается процедура:
Код

CREATE OR REPLACE PROCEDURE download_doc 
(
id_doc  number default 0
)
AS
l_blob_content  WWDOC_DOCUMENT.blob_content%TYPE;
l_mime_type     WWDOC_DOCUMENT.mime_type%TYPE;
BEGIN
  SELECT blob_content,
         mime_type
  INTO   l_blob_content,
         l_mime_type
  FROM   WWDOC_DOCUMENT 
  WHERE  id_obj = id_doc;
 OWA_UTIL.mime_header(l_mime_type, FALSE);
  HTP.p('Content-Length: ' || DBMS_LOB.getlength( l_blob_content));
  OWA_UTIL.http_header_close;
  WPG_DOCLOAD.download_file (l_blob_content);
EXCEPTION
  WHEN OTHERS THEN
    HTP.htmlopen;
    HTP.headopen;
    HTP.title('File Downloaded');
    HTP.headclose;
    HTP.bodyopen;
    HTP.header(1, 'Download Status');
    HTP.print(SQLERRM);
    HTP.bodyclose;
    HTP.htmlclose;
END;

Файл открывается. 
При попытке открыть файл по ссылке повторно или открыть другой файл, ни какого действия не происходит(файлы не открываются). Файл можно открыть только после обновления страницы DOC_ZAYAVKA. Подскажите, пожалуйста, почему не работает ссылка на повторное открытие файла? И как это исправить

Автор: behelit_ru 5.5.2013, 22:58
Попробуйте изменить javascript
Код

<script language="JavaScript">
function opendocwin(id_doc)
{
var w = window.open("download_doc?id_doc="+id_doc,"download_doc");
}
</script>

Подозреваю, что функция просто "сносится" от такого присвоения и больше не работает.

И совет, используйте инструменты разработчика в браузере, чтобы видеть ошибки скриптов, очень помогает smile

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id515a7af96ccc19436b000009#findElement_E7045_5186b9e56ccc193d1f0009da_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)