Привет всем !!!
Такая проблема использую 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();
Может кто поможет хотя бы куда копать ?????
>Привет всем !!!
>Такая проблема использую 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'); связано это с кодировкой,
вот и вся запута :-)
Надо перевести стандартный ввод в байтовый режим.
binmode STDIN, ':raw';