powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / С FTP записать файл в ОЗУ
13 сообщений из 13, страница 1 из 1
С FTP записать файл в ОЗУ
    #39593840
Dr_Grizzly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток коллеги! Столкнулся с такой задачкой, хотелось бы с FTP скачивать файл не на диск, а в ОЗУ, некий такой Stream,
есть ли такое в Оракле?

В целом задача простая, с FTP получить XML файл, обработать его и записать в таблицу в CLOB. Так вот не хочется создавать на диске временный каталог, а писать файл в ОЗУ, сверить его по размеру с данными FTP, если все ок, то обработать и поместить в таблицу.

С помощью пакета ftp я подключаюсь, получаю список файлов, а дальше у FTP функция записи подразумевает дисковое пространство... Можно обойти это?
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593844
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где то в сети валялся пакет ftp_pkg
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593850
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
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.
IS
  l_conn  Utl_Tcp.connection;
  v_BLOB BLOB;
  v_cnt  NUMBER;
  txt_ftp_err   VARCHAR2(1000);
  exc_ftp_err   EXCEPTION;
BEGIN

    txt_ftp_err := '';

    BEGIN
        l_conn := get_my_connect;
        d_menu.Ftp.BINARY(p_conn => l_conn);
    EXCEPTION
        WHEN OTHERS THEN
        BEGIN
            txt_ftp_err := 'Не удалось установить соединение с сервером.';
            RAISE exc_ftp_err;
        END;    
    END;    
    
    BEGIN
        v_blob := d_menu.Ftp.get_remote_binary_data (p_conn      => l_conn,
                                                     p_file => './путь/k.dbf');
        d_menu.Ftp.logout(l_conn);
    EXCEPTION
        WHEN OTHERS THEN
        BEGIN
            txt_ftp_err := 'Не удалось загрузить данные из файла k.dbf на сервере.';
            RAISE exc_ftp_err;
        END;    
    END;        
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593853
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поиск по "PLSQL FTP", одна из первых ссылок .
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593871
Dr_Grizzly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Супер! Работает ))) Спасиб большое!))
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593890
Dr_Grizzly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А работает как-то интересно... Почему-то в начале скаченного документа присутствует произвольный набор символов, 1-3 символа, хотя в оригинале их нет. Получается что файл xml начинается с такого "?<?xml version="1.0" encoding="utf-8"?>" первый символ - лишний и не понятно от куда он его вытащил )) ощущение, что где-то выходим за рамки буфера?

Вот такой код получился...

l_conn UTL_TCP.connection;
l_clob CLOB;
BEGIN
l_conn := ftp.login('<FTPSERVER>', '21', 'USER', 'PASSW');
Ftp.BINARY(p_conn => l_conn);
EXCEPTION
WHEN OTHERS THEN
BEGIN
txt_ftp_err := 'Не удалось установить соединение с сервером.';
RAISE exc_ftp_err;
END;
END;

BEGIN
l_clob := Ftp.get_remote_ascii_data (p_conn => l_conn,
p_file => 'FILE123.xml');
Ftp.logout(l_conn);
EXCEPTION
WHEN OTHERS THEN
BEGIN
txt_ftp_err := 'Не удалось загрузить данные из файла на сервере.';
RAISE exc_ftp_err;
END;
END;

Затем я его пишу в таблицу через конвертер

convert(l_clob,'CL8MSWIN1251','AL32UTF8')

Вот сижу и чешу мозг )) Может кто уже сталкивался?
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593891
Dr_Grizzly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если не конвертировать, то начало файла такое "п»ї<?xml version="1.0" encoding="utf-8"?>"
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593894
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dr_Grizzly1-3 символа, хотя в оригинале их нетBOM. Редактор может его не показывать.
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593901
Dr_Grizzly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проверили эту мысль, не оно... явно мусорные символы... В загрузке через файл - все чисто. Открываю тем же viewer'ом. В одном случае их нет, в другом - есть...
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593903
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то ты нагородил непоследовательное. Режим выставляешь binary, а дергаешь get_ascii_data, это при чтении-то XML в UTF8, а потом используешь convert-функцию.

Читай бинарные данные в blob без всяких ascii-подобных функций. А потом конвертируй blob в clob с явным указанием кодировки. Ну, и если кодировка БД не UTF8, то рискуешь потерять некоторые символы на конвертации.
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593910
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и уровень развития современных технологий позволяет получить XML из BLOB-а без необходимости явного вызова конвертации в CLOB. И хранить данные можно сразу в XMLtype, если тебе выложили действительно валидный XML по разметке/схеме.
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39593911
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dr_Grizzlyявно мусорные символыВ 1251
Код: sql
1.
п»ї = EFBBBF

явно BOM от utf-8
...
Рейтинг: 0 / 0
С FTP записать файл в ОЗУ
    #39602824
Dr_Grizzly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Раз уж мы тут затронули тему передачи файла - то я тут столкнулся с такой проблемой - когда передаю один файл - то все хорошо, он уходит полностью. Но когда иду по списку, то похоже что следующая команда отправки не дожидается окончания предыдущей, прерывает сессию и начинает новую передачу, следовательно файлы уходят битыми... Перекопал пакет FTP, найти что-то похожее на ожидание не смог. Может какими-то другими способами можно дождаться окончания передачи перед новым запросом?
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / С FTP записать файл в ОЗУ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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