The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"DBD::Pg  не получаеться загрузить файлы в базу"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"DBD::Pg  не получаеться загрузить файлы в базу"  
Сообщение от berx email(??) on 06-Мрт-07, 16:00 
Привет всем !!!
Такая проблема использую DBI mod_perl apache  чтоб загрузить файлы в базу данных и потом их от туда прочитать при необходимости.
Таким макаром
$db->func('lo_creat')  и так далее, все типа работает загружаеться а вот когда я хочу прочитать то получаеться толи не все данные читаються толи не все данные пишуться в таблицу
может кто подскажет что не так делаю ???

Ниже то что я делаю.

use DBI;
#use DBD::Pg;
use CGI qw/:standard/;

$db = DBI->connect("dbi:Pg:dbname=template1","pgsql","",{PrintError=>0});

print header({-charset=>'utf-8'});
print start_html;
print start_form({-enctype=>'multipart/form-data'});
print textfield({-name=>'file_name',-size=>'50'}),p;
print filefield({-name=>'upload_file',-size=>'50'}),p;
print submit();

$files = param('upload_file');
$filename = param('file_name');

$db->{AutoCommit} = 0;

if (defined $files)
{
$lobj_id = $db->func($db->{'pg_INV_WRITE'}, 'lo_creat');
while(<$files>)
{
$buf = $_;
--------------- С таким вариантом все нормально
#$buf = 'abc' x 100;
$lobj_fd = $db->func($lobj_id, $db->{'pg_INV_WRITE'}, 'lo_open');
$db->func($lobj_fd, 0, 0, 'lo_lseek');
$len = $db->func($lobj_fd, $buf, length($buf), 'lo_write');
die "Errors writing lo\n" if $len != length($buf);
}
$db->func($lobj_fd, 'lo_close') or die "Problems closing lo object\n";
$db->{AutoCommit} = 1;
}

if (defined $lobj_id)
{
$q = "insert into files(filename,file) values('$filename','$lobj_id')";
$rv = $db->do($q);
if (!defined $rv) { print "Insert record error ","\n"; exit(0); } else
   {
    print "Large object ID = ",$lobj_id,"\n";
   }
}
$db->disconnect();


Может кто поможет хотя бы куда копать ?????

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "DBD::Pg  не получаеться загрузить файлы в базу"  
Сообщение от berx email(??) on 06-Мрт-07, 17:19 
>Привет всем !!!
>Такая проблема использую DBI mod_perl apache  чтоб загрузить файлы в базу
>данных и потом их от туда прочитать при необходимости.
>Таким макаром
>$db->func('lo_creat')  и так далее, все типа работает загружаеться а вот когда я хочу прочитать то получаеться толи не все данные читаються толи не все данные пишуться в таблицу
>может кто подскажет что не так делаю ???
>
>Ниже то что я делаю.
>
>use DBI;
>#use DBD::Pg;
>use CGI qw/:standard/;
>
>$db = DBI->connect("dbi:Pg:dbname=template1","pgsql","",{PrintError=>0});
>
>print header({-charset=>'utf-8'});
>print start_html;
>print start_form({-enctype=>'multipart/form-data'});
>print textfield({-name=>'file_name',-size=>'50'}),p;
>print filefield({-name=>'upload_file',-size=>'50'}),p;
>print submit();
>
>$files = param('upload_file');
>$filename = param('file_name');
>
>$db->{AutoCommit} = 0;
>
>if (defined $files)
>{
> $lobj_id = $db->func($db->{'pg_INV_WRITE'}, 'lo_creat');
> while(<$files>)
> {
> $buf = $_;
>--------------- С таким вариантом все нормально
> #$buf = 'abc' x 100;
> $lobj_fd = $db->func($lobj_id, $db->{'pg_INV_WRITE'}, 'lo_open');
> $db->func($lobj_fd, 0, 0, 'lo_lseek');
> $len = $db->func($lobj_fd, $buf, length($buf), 'lo_write');
> die "Errors writing lo\n" if $len != length($buf);
> }
> $db->func($lobj_fd, 'lo_close') or die "Problems closing lo object\n";
> $db->{AutoCommit} = 1;
>}
>
>if (defined $lobj_id)
>{
> $q = "insert into files(filename,file) values('$filename','$lobj_id')";
> $rv = $db->do($q);
> if (!defined $rv) { print "Insert record error ","\n"; exit(0); }
>else
>   {
>    print "Large object ID = ",$lobj_id,"\n";
>   }
>}
>$db->disconnect();
>
>
>Может кто поможет хотя бы куда копать ?????


Кому интересто и при чтении и при записи
lobj_fd = $db->func($lobj_fd,0,0,'lo_lseek'); связано это с кодировкой,
вот и вся запута :-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "DBD::Pg  не получаеться загрузить файлы в базу"  
Сообщение от Жужа on 14-Авг-07, 17:48 
Надо перевести стандартный ввод в байтовый режим.
binmode STDIN, ':raw';


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру