powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Тонкий клиент+Tomcat+Oracle - писать, читать бинарные файлы в базу
3 сообщений из 3, страница 1 из 1
Тонкий клиент+Tomcat+Oracle - писать, читать бинарные файлы в базу
    #32566346
Фотография insect
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется Tomcat и через него осуществляется доступ к базе данных Oracle(jsp и servlet). В настоящее время возникла задача обеспечить запись в базу данных файлов(бинарных), находящихся у пользователя и извлечение этих файлов из базы другими пользователями. Задача усложняется тем, что доступ должен осуществляться только посредством Internet Explorer (заказчик требует).
Может кто кинет ссылками с решением подобных задач?

Electronic Insect
...
Рейтинг: 0 / 0
Тонкий клиент+Tomcat+Oracle - писать, читать бинарные файлы в базу
    #32566495
SOMNAMBULA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
insectЗадача усложняется тем, что доступ должен осуществляться только посредством Internet Explorer (заказчик требует).
А что это может усложнять? Что значит извлечение из базы?
...
Рейтинг: 0 / 0
Тонкий клиент+Tomcat+Oracle - писать, читать бинарные файлы в базу
    #32566554
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще-то я бы файлы расположил в файловой системе,а не в базе, но если так хочет заказчик .. да пусть будет так :)

Тут быстренько накидал примерчик

1. Создай в каталог C:\BLOB и положи туда файл, скажем, test.xls

2. Создадим таблицу с blob-ом и загоним туда наш файл
Код скрипта 1.sql
Код: 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.
47.
spool  1 
connect system/manager
drop directory documents;
CREATE OR REPLACE DIRECTORY documents AS 'C:\BLOB';
GRANT READ ON DIRECTORY documents TO PUBLIC;
connect scott/tiger

DROP TABLE my_docs;
DROP SEQUENCE my_docs_seq;
DROP PROCEDURE load_file_to_my_docs;

CREATE TABLE my_docs (
  id    NUMBER( 10 )     NOT NULL,
  name  VARCHAR2( 200 )  NOT NULL,
  doc   BLOB           NOT NULL
)
/

ALTER TABLE my_docs ADD (
  CONSTRAINT my_docs_pk PRIMARY KEY (id)
)
/

CREATE SEQUENCE my_docs_seq;


CREATE OR REPLACE PROCEDURE load_file_to_my_docs (p_file_name  IN  my_docs.name%TYPE) AS
  v_bfile      BFILE;
  v_blob       BLOB;
BEGIN
  INSERT INTO my_docs (id, name, doc)
  VALUES (my_docs_seq.NEXTVAL, p_file_name, empty_blob())
  RETURN doc INTO v_blob;

  v_bfile := BFILENAME('DOCUMENTS', p_file_name);
  Dbms_Lob.Fileopen(v_bfile, Dbms_Lob.File_Readonly);
  Dbms_Lob.Loadfromfile(v_blob, v_bfile, Dbms_Lob.Getlength(v_bfile));
  Dbms_Lob.Fileclose(v_bfile);

  COMMIT;
END;
/

EXEC load_file_to_my_docs('test.xls');

exit;


его запуск sqlplus /nolog @1

3. Создадим jsp для download -а файла text.xls из базы

Код: 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.
<%@ page import="java.sql.*,java.io.*" %>
<%
    Connection  conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    java.sql.Blob my_blob = null;
    BufferedOutputStream binout = null;
    BufferedInputStream in = null;
    
    try {
      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
      conn =  DriverManager.getConnection("jdbc:oracle:oci8:@","scott", "tiger");
      stmt = conn.createStatement ();
      rs = stmt.executeQuery ("select doc from my_docs where name='test.xls'");
      if (rs.next()) {
       // Get LOB locators into Java wrapper classes.
        my_blob = (java.sql.Blob)rs.getObject( 1 );
      }

      binout = new BufferedOutputStream ( response.getOutputStream() );
      in = new  BufferedInputStream ( (InputStream)my_blob.getBinaryStream());      

      response.setHeader("Content-Type","application/octet-stream;");
      response.setHeader("Content-disposition","attachment;filename=\"test.xls\"");

      int ch = in.read();
      while ( ch!=- 1  ) 
      {
       binout.write(ch);
       ch=in.read();
      }
    } catch ( Exception e ) {
       String errmsg = new String(e.getMessage().getBytes("ISO-8859-1"), "Cp1251");
       throw new Exception (errmsg);    
    } finally {
       try {
          if (rs!= null) rs.close(); 
          if (stmt!= null) stmt.close();
          if (conn!= null) conn.close();
          if (binout!= null) binout.close();
          if (in!= null) in.close();
       } catch ( Exception ignore ) {}
    }    
%>

Код рабочий

4. Upload предлагаю вам сделать самому и опубликовать здесь :)

А ссылки - читай оракловую доку ( наверняка она у тебя есть ), я практически все оттуда взял :)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Тонкий клиент+Tomcat+Oracle - писать, читать бинарные файлы в базу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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