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

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

С помощью пакета ftp я подключаюсь, получаю список файлов, а дальше у FTP функция записи подразумевает дисковое пространство... Можно обойти это?
...
Рейтинг: 0 / 0
31.01.2018, 12:24
    #39593844
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
С FTP записать файл в ОЗУ
где то в сети валялся пакет ftp_pkg
...
Рейтинг: 0 / 0
31.01.2018, 12:28
    #39593850
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
С FTP записать файл в ОЗУ
Код: 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
31.01.2018, 12:30
    #39593853
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
С FTP записать файл в ОЗУ
Поиск по "PLSQL FTP", одна из первых ссылок .
...
Рейтинг: 0 / 0
31.01.2018, 12:45
    #39593871
Dr_Grizzly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
С FTP записать файл в ОЗУ
Супер! Работает ))) Спасиб большое!))
...
Рейтинг: 0 / 0
31.01.2018, 13:05
    #39593890
Dr_Grizzly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
С FTP записать файл в ОЗУ
А работает как-то интересно... Почему-то в начале скаченного документа присутствует произвольный набор символов, 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
31.01.2018, 13:06
    #39593891
Dr_Grizzly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
С FTP записать файл в ОЗУ
Если не конвертировать, то начало файла такое "п»ї<?xml version="1.0" encoding="utf-8"?>"
...
Рейтинг: 0 / 0
31.01.2018, 13:08
    #39593894
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
С FTP записать файл в ОЗУ
Dr_Grizzly1-3 символа, хотя в оригинале их нетBOM. Редактор может его не показывать.
...
Рейтинг: 0 / 0
31.01.2018, 13:18
    #39593901
Dr_Grizzly
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
С FTP записать файл в ОЗУ
Проверили эту мысль, не оно... явно мусорные символы... В загрузке через файл - все чисто. Открываю тем же viewer'ом. В одном случае их нет, в другом - есть...
...
Рейтинг: 0 / 0
31.01.2018, 13:23
    #39593903
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
С FTP записать файл в ОЗУ
Что-то ты нагородил непоследовательное. Режим выставляешь binary, а дергаешь get_ascii_data, это при чтении-то XML в UTF8, а потом используешь convert-функцию.

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

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


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