Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получить через Postgres файлы хранящиеся на диске / 3 сообщений из 3, страница 1 из 1
06.04.2016, 07:00
    #39208893
D0KX
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить через Postgres файлы хранящиеся на диске
Всем привет.
Есть такая простая задача: вернуть пользователю в браузер файл для загрузки, но проблема в том, что файлы хранятся на сервере с БД в каталоге и имеют название id из БД (без расширения и исходного названия), исходное название и расширение хранится в бд в отдельной таблице.
Эти файлы в данный каталог загружаются из другого приложения через postgres, а мне надо получать их в своем приложении как минимум с расширением файлов. Вот и решил попробовать достать эти файлы через lo_import, а затем просто возвращать из запроса в приложение на сервере, а дальше уже возвращать клиенту, но вот проблема: lo_import загружает файл в бд, возвращает oid, как теперь получить эти данные? по факту после загрузки они попали в pg_largeobject, но вот собрать их так, чтобы файл открылся (после объединения всех частей и добавления нужного расширения) как надо не получается.

собирать пробовал так
SELECT array_to_string(array(select data from pg_largeobject where loid = 135422 order by pageno),'');
...
Рейтинг: 0 / 0
06.04.2016, 09:14
    #39208947
ursido
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить через Postgres файлы хранящиеся на диске
D0KX,

RTFM
...
Рейтинг: 0 / 0
18.04.2016, 12:06
    #39217984
Mavr747
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить через Postgres файлы хранящиеся на диске
Вариант 2
Написать свою хранимую процедуру на языке, ну например Perl установив предварительно расширение PlPerlU, которое позволяет забирать данные из любого каталога на диске где установлен PG.

Пример функции которая забирает требуемый файл:
-- Function: read_file_as_hex(text)

-- DROP FUNCTION read_file_as_hex(text);

CREATE OR REPLACE FUNCTION read_file_as_hex(name text)
RETURNS text AS
$BODY$
my $s = "";
my $buff = "";
my $read_buff = "";
my $file_name = $_[0];
my $name_size = length($file_name);
$file_name = pack("H$name_size", $file_name);
unless (open(READING_FILE, $file_name)) {
return ($buff);
} else {
binmode(READING_FILE);
my $file_size = -s($file_name);
read(READING_FILE, $read_buff, $file_size);
close(READING_FILE);
$s = 2*$file_size;
$buff = unpack("H$s", $read_buff );
return ($buff);
}

$BODY$
LANGUAGE plperlu VOLATILE
COST 100;
ALTER FUNCTION read_file_as_hex(text)
OWNER TO postgres;

Файл передается как HEX последовательность, в Browser(е) на Java собрать как должно быть.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получить через Postgres файлы хранящиеся на диске / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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