
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
06.04.2016, 07:00
|
|||
|---|---|---|---|
|
|||
Получить через Postgres файлы хранящиеся на диске |
|||
|
#18+
Всем привет. Есть такая простая задача: вернуть пользователю в браузер файл для загрузки, но проблема в том, что файлы хранятся на сервере с БД в каталоге и имеют название 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),''); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.04.2016, 09:14
|
|||
|---|---|---|---|
|
|||
Получить через Postgres файлы хранящиеся на диске |
|||
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.04.2016, 12:06
|
|||
|---|---|---|---|
|
|||
Получить через Postgres файлы хранящиеся на диске |
|||
|
#18+
Вариант 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 собрать как должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=53&mobile=1&tid=1997288]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
157ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 490ms |

| 0 / 0 |
