Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 oracle + ftp  [new]
Lynx_79
Member

Откуда: Almaty
Сообщений: 6
все привет!
подскажите какими средставами можно сделать так:
в pl/sql создается определенный файл и его надо сразу отправить по фтп, если файл удачно отправлен то функция завершается нормально, иначе ошибка клиенту.
25 апр 05, 14:02    [1494689]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
Через Java сойдет?
25 апр 05, 14:27    [1494842]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Lynx_79
Member

Откуда: Almaty
Сообщений: 6
Denis Popov
Через Java сойдет?


к сожалению нет ;(
26 апр 05, 10:59    [1497171]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Elic
Member

Откуда:
Сообщений: 30024
Поиск utl_tcp ftp:

FTP From PL/SQL

Oracle 8i PL/SQL FTP Protocol Implementation
26 апр 05, 11:20    [1497307]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Lynx_79
Member

Откуда: Almaty
Сообщений: 6
to Elic: огромное спасибо за инфу.
27 апр 05, 07:20    [1500424]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
kamolsan
Member

Откуда:
Сообщений: 364
Denis Popov
Через Java сойдет?

Сойдёт, буду очень благодарен!
3 мар 06, 14:58    [2414059]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
Приаттаченный файл - создание JAVA SOURCE по имени FTPSession. Сам класс можно поискать: http://www.google.ru/search?q=FTPSession+sessionSock Теперь:
create or replace java source named "FTPAction" as
import java.sql.Blob;
import java.sql.SQLException;
import java.io.IOException;

public class FTPAction {

  public static void toFile (
      String hostname
    , String username
    , String password
    , Blob blob
    , String fileName
  )
    throws IOException, SQLException {
    FTPSession sess = null;
    try {
      sess = new FTPSession(hostname, username, password);
      byte[] bytes = blob.getBytes(1, (int)blob.length());
      sess.put(fileName, bytes, true);
    } finally {
      if (sess != null) {sess.close();}
    }
  }

  public static void copyFile(
    String hostname
    , String username
    , String password
    , String fromFilename
    , String toFilename
  )
    throws IOException {
    FTPSession sess = null;
    try {
      sess = new FTPSession(hostname, username, password);
      byte[] bytes = sess.get(fromFilename, true);
      sess.put(toFilename, bytes, true);
    } finally {
      if (sess != null) {sess.close();}
    }
  }
}
/
create or replace package ftpaction as
procedure blob2file (
    p_hostname varchar2
  , p_username varchar2
  , p_password varchar2
  , p_blob     blob
  , p_filename varchar2
) as
  language java name 
  'FTPAction.toFile(java.lang.String, java.lang.String, java.lang.String, java.sql.Blob, java.lang.String)';

procedure copyfile (
    p_hostname      varchar2
  , p_username      varchar2
  , p_password      varchar2
  , p_from_filename varchar2
  , p_to_filename   varchar2
) as
  language java name 
  'FTPAction.copyFile(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)';
end;
/

Пример:
exec dbms_java.grant_permission( user, 'SYS:java.net.SocketPermission', 'HOST_NAME', 'connect,resolve')

declare
  v_blob blob;
  v_text varchar2(3) := 'XXX';
  v_raw long raw;
begin
  dbms_lob.createTemporary(v_blob, false, dbms_lob.SESSION);
  v_raw := utl_raw.cast_to_raw(v_text);
  dbms_lob.writeAppend(v_blob, utl_raw.length(v_raw), v_raw);
  ftpaction.blob2file (
      p_hostname => 'host_name'
    , p_username => 'user'
    , p_password => 'password'
    , p_blob     => v_blob
    , p_filename => '/pub/xxx.blob'
  );
end;
/

host_name - имя или адрес сервера, без "ftp://" спереди.

К сообщению приложен файл (FTPSession.sql - 11Kb) cкачать
3 мар 06, 15:38    [2414324]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
kamolsan
Member

Откуда:
Сообщений: 364
при компиляции пакета ftpaction normal пользователем выдаёт ошибку:

К сообщению приложен файл. Размер - 0Kb
3 мар 06, 16:36    [2414736]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
PL/SQL Developer? Это его бага, заметь: при вытаскивании кода на изменение Ява-класса он не берет его имя в кавычки. В результате идет попытка создать новый класс с приведением имени в верхний регистр. Я это правлю руками, т.е
create or replace and compile java source named ftpaction as
меняю на
create or replace and compile java source named "FTPAction" as
и не обращаю внимание на сообщение "Object XXX has been deleted".
3 мар 06, 16:51    [2414835]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
kamolsan
Member

Откуда:
Сообщений: 364
Хочу из удалённой машины (FTP) скопировать 1.jpg файл
На удалённой машине есть папка ‘c:\post\26287\send\1.jpg’. Вот её надо скопировать в свою ОС ‘c:\post\26287\recv\1.jpg’.
begin
  ftpaction.copyfile (
      p_hostname => '192.168.0.49'
    , p_username => '26287'
    , p_password => '26287'
    ,p_from_filename => 'c:/post/26287/send/1.jpg'
    ,p_to_filename => 'c:\post\26287\recv\1.jpg'
  );
end;
/

Висит на FTP сервере и рушиться
ORA-29532: Java call terminated by uncaught Java exception: java.io.IOException: 421 Connection Timed-Out !
ORA-06512: at "UZB.FTPACTION", line 0
ORA-06512: at line 9

Может что-то делаю не так?
3 мар 06, 17:31    [2415047]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862
Проверь сперва в консоли, лучше на оракловой тачке:
ftp 192.168.0.49

Присоединилось?
3 мар 06, 17:45    [2415120]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
kamolsan
Member

Откуда:
Сообщений: 364
Denis Popov
Проверь сперва в консоли, лучше на оракловой тачке:
ftp 192.168.0.49

Присоединилось?


да! через Total Commander и Explorer FTP работает!

эти классы перевёл на JBuilder - тоже самое - зависает!
3 мар 06, 17:58    [2415171]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862

kamolsan wrote:
> через Total Commander и Explorer FTP работает!
>
> эти классы перевёл на JBuilder - тоже самое - зависает!

Firewall?

Posted via ActualForum NNTP Server 1.3

3 мар 06, 18:12    [2415214]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
kamolsan
Member

Откуда:
Сообщений: 364
Denis Popov

Firewall?

Нет никаких Firewall, FTP на другой машине, которая в одной локальной сети, я же просто соединяюсь по консоли?
3 мар 06, 18:16    [2415227]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Denis Popov
Member

Откуда: Санкт-Петербург
Сообщений: 7862

kamolsan wrote:
> Нет никаких Firewall, FTP на другой машине, которая в одной локальной
> сети, я же просто соединяюсь по консоли?

Тогда ИМХО разве что отладкой. Пробегись в JBuilder'е по вызываемым методам,
может найдется причина. У меня все работает...

Posted via ActualForum NNTP Server 1.3

3 мар 06, 18:24    [2415266]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
kamolsan
Member

Откуда:
Сообщений: 364
Denis Popov

Тогда ИМХО разве что отладкой. Пробегись в JBuilder'е по вызываемым методам,
может найдется причина. У меня все работает...

в JBuilder’е поднял классы FTPSession (который ВЫ мне дали), FTPAction. В FTPAction добавил main метод чтобы запускать:
package untitled2;

import java.sql.Blob;
import java.sql.SQLException;
import java.io.IOException;

public class FTPAction {

  public static void toFile (
      String hostname
    , String username
    , String password
    , Blob blob
    , String fileName
  )
    throws IOException, SQLException {
    FTPSession sess = null;
    try {
      sess = new FTPSession(hostname, username, password);
      byte[] bytes = blob.getBytes(1, (int)blob.length());
      sess.put(fileName, bytes, true);
    } finally {
      if (sess != null) {sess.close();}
    }
  }

  public static void copyFile(
    String hostname
    , String username
    , String password
    , String fromFilename
    , String toFilename
  )
    throws IOException {
    FTPSession sess = null;
    try {
      sess = new FTPSession(hostname, username, password);
      byte[] bytes = sess.get(fromFilename, true);
      sess.put(toFilename, bytes, true);
    } finally {
      if (sess != null) {sess.close();}
    }
  }

  public static void main(String[] args) {
    try
    {
      copyFile("192.168.0.129","26287","26287","c:/post/26287/send/1.jpg","c:\\post\\26287\\recv\\1.jpg");
    }
    catch(Exception e)
    {}
  }
  
}

Может не так запускаю или что-то ещё?
6 мар 06, 12:18    [2420645]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: oracle + ftp  [new]
Juve
Member

Откуда: Москва
Сообщений: 310
Та же фигня... виснет во время передачи имени пользователя на строке:
String line = buffReader.readLine();
То есть ответ от сервера после приема userName якобы не приходит

Причем на виндовой iis отрабатывает нормально, а , например, на Cerberus не проходит

Знатоки java, подскажите в чем трабл
12 апр 07, 18:29    [4014174]     Ответить | Цитировать Сообщить модератору
 Re: oracle + ftp  [new]
Juve
Member

Откуда: Москва
Сообщений: 310
Вобщем я разобрался...виснет он потому что сервер ожидает имя пользователя, и пока оно не придет, он ничего отвечать не будет. А вот чтобы оно пришло, надо
  public String doCommand(String commandString)
    throws IOException {
    outStream.writeBytes(commandString + "\n");
    return getResponse();
  }
заменить на
  public String doCommand(String commandString)
    throws IOException {
    outStream.writeBytes(commandString + "\r\n");
    return getResponse();
  }
Некоторые сервера работают и с первым вариантом, а некоторым возврат каретки подавай
13 апр 07, 12:58    [4017138]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить