Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> передача файла на сервер средствами pl/sql 
:(
    Опции темы
EmilRegis
Дата 13.7.2009, 06:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: нет
Всего: 4



Здравствуйте...Проблема у меня такая...Есть сайт, сервер его написан полностью на pl/sql.он же динамически создаёт html-странички, использует js и прочее..требуется добавить туда возможность передачи файлов от клиента на сервер...
Вопрос в том как это сделать? находил в интернете разные способы, но везде для этого используются какие-то серверные функции и процедуры..нигде не могу найти какие инструменты для этого использует pl/sql ?

нашёл только следующее...в документации написано, что так файл загружается на сервер
Код

<html>
<head> 
<title>test upload</title>
</head>
<body>
 <FORM    enctype="multipart/form-data"
action="pls/myDAD/write_info"
method="POST">
<p>Author's Name:<INPUT type="text" name="who">
<p>Description:<INPUT type="text" name="description"><br>
<p>File to upload:<INPUT type="file" name="file"><br>
<p><INPUT type="submit">
</FORM>
</body>
</html>

Код

procedure write_info (
who         in varchar2,
description in varchar2,
file        in varchar2) as
begin
insert into myTable values (who, description, file);
htp.htmlopen;
htp.headopen;
htp.title('File Uploaded');
htp.headclose;
htp.bodyopen;
htp.header(1, 'Upload Status');
htp.print('Uploaded ' || file || ' successfully');
htp.bodyclose;
htp.htmlclose;
end;


но тогда в таблицу myTable ложится строка типа F1878960863/woreadme.txt , где имя файла woreadme.txt ...если кто-нибудь знает как достучаться до самого файла подскажите пожалуйста...
PM MAIL   Вверх
jsa
Дата 13.7.2009, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20





--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
EmilRegis
Дата 13.7.2009, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: нет
Всего: 4



да я как раз эту документацию и читал и так и не понял,сам файл загружается или только какая то ссылка на него?

Добавлено через 14 минут и 29 секунд
и ещё где можно посмотреть пакет wpg_docload ?
PM MAIL   Вверх
Zloxa
Дата 13.7.2009, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161




M
Zloxa
Перенесено из баз данных



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
jsa
Дата 13.7.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Цитата(EmilRegis @  13.7.2009,  13:01 Найти цитируемый пост)
да я как раз эту документацию и читал и так и не понял,сам файл загружается или только какая то ссылка на него?

Цитата

mod_plsql stores the file contents in the database in the document storage table. The table name is derived from the PlsqlDocumentTablename DAD setting

загружается сам файл

Добавлено через 1 минуту и 40 секунд
Цитата

The action procedure does not have to return anything to the user, but it is a good idea to let the user know whether the Submit succeeded or failed, as shown subsequently.



--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
EmilRegis
Дата 14.7.2009, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: нет
Всего: 4



Цитата(jsa @  13.7.2009,  12:41 Найти цитируемый пост)
The action procedure does not have to return anything to the user, but it is a good idea to let the user know whether the Submit succeeded or failed, as shown subsequently.

ну это просто говорится о том, что процедура выкидывает пользователя на страницу, где ему сообщается о том,что файлы загружены...

Так,хорошо,спасибо, значит мы имеем загруженный файл...теперь требуется его отправлить пользователю на страницу(например файл - это картинка)..
Про download там написано следующее.
Процедура загрузки:
Код

procedure process_download is
v_filename varchar2(255);
begin
     -- getfilepath() uses the SCRIPT_NAME and PATH_INFO cgi
     -- environment variables to construct the full path name of
     -- the file URL, and then returns the part of the path name
     -- following '/docs/'
     v_filename := getfilepath;
     select name into v_filename from plsql_gateway_doc
                      where UPPER(name) = UPPER(v_filename);
     -- now we call docload.download_file to initiate
     -- the download.
     wpg_docload.download_file(v_filename);
     exception
        when others then
           v_filename := null;
end process_download;


Здесь вопросы такие...что за табличка plsql_gateway_doc и где взять пакет wpg_docload ?

Далее..
Цитата

Use the Direct Binary Large Object (BLOB) Download mechanism to download a BLOB from any database table. You do this by calling a PL/SQL procedure that streams the standard HTTP headers, such as mime-type and content-length, and then invokes wpg_docload.download_file(blob_name) to download BLOB b,ob_name, as shown here:

   1. Create a stored procedure that calls wpg_docload.download_file(blob) where blob is of data type BLOB. Since mod_plsql has no information about the contents in the BLOB, you must supply them.
   2.Setup the Content-Type and other headers.

      In the following example, the procedure uses the name from the argument to select a BLOB from a table and initiates the Direct BLOB download:

      create or replace procedure download_blob(name in varchar2) is
      myblob blob; 
      begin


          * Select the BLOB out of mytable using the name argument.
             select blob_data into myblob from mytable where blob_name = name;


          * Setup headers which describes the content.
            owa_util.mime_header('text/html', FALSE); 
            htp.p('Content-Length: ' || dbms_lob.getlength(myblob)); 
            owa_util.http_header_close;


          * Initiate Direct BLOB download.
             wpg_docload.download_file(myblob); 
             end;


            The structure of the mytable table is as follows:

            create table mytable 
            ( 
            blob_name varchar2(128), 
            blob_data blob 
            ); 


Здесь тоже возникают вопросы...таблица mytable - откуда она берётся и как она создаётся? ведб она содержит имя файла и контент...а при апплоаде структура myTable (who, description, file); где file - это имя файла...

PM MAIL   Вверх
jsa
Дата 14.7.2009, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 704
Регистрация: 19.1.2006
Где: Новосибирск

Репутация: 1
Всего: 20



Цитата(EmilRegis @  14.7.2009,  10:48 Найти цитируемый пост)
что за табличка plsql_gateway_doc

Цитата

The PlsqlDocumentTablename parameter specifies the table for storing documents when file uploads are performed through this DAD.

Syntax:

PlsqlDocumentTablename  [document_table_name]

PlsqlDocumentTablename  my_documents

or,

PlsqlDocumentTablename  scott.my_document_table


Цитата(EmilRegis @  14.7.2009,  10:48 Найти цитируемый пост)
где взять пакет wpg_docload 

похоже на стандартный пакет


--------------------
Все мы, на перине с песней, строим небо на земле © Ю. Шевчук
PM MAIL ICQ   Вверх
EmilRegis
Дата 16.7.2009, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: нет
Всего: 4



так..файл я на сервер передал...щас он хранится у меня в поле типа blob...
теперь пытаюсь вернуть картинку пользователю..всё делаю как написано в документации
Код

PROCEDURE download (file IN  VARCHAR2) AS
  l_blob_content  blob;
  l_mime_type     constr.wwv_document$.mime_type%TYPE;
BEGIN
  SELECT content,
         mime_type
  INTO   l_blob_content,
         l_mime_type
  FROM   z_userinfo 
  WHERE  file_name = file;

  OWA_UTIL.http_header_close;
  WPG_DOCLOAD.download_file(l_blob_content);
 
EXCEPTION
  WHEN OTHERS THEN
    constr.HTP.htmlopen;
    constr.HTP.headopen;
    constr.HTP.title('File Downloaded');
    constr.HTP.headclose;
    constr.HTP.bodyopen;
    constr.HTP.header(1, 'Download Status');
    constr.HTP.print(SQLERRM);
    constr.HTP.bodyclose;
    constr.HTP.htmlclose;
END download;

Здесь в таблице z_userinfo content - это нужная картинка в блоб....на строчке WPG_DOCLOAD.download_file(l_blob_content); вылетает ошибка ORA-06502: PL/SQL: numeric or value error
никак не могу понять почему так?((
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.