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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
use DBI; use GD; use CGI; # Handle für die Ausgabe diverser CGI-"Sachen" my $cgi = CGI->new; # DB öffnen my $dbh = DBI->connect('dbi:Oracle:DB','username','password') or die $DBI::errstr; ### -------------------------------------------------- # SQL-Abfrage für das Auslesen des Bildes aus der DB vorbereiten my sth = $dbh->prepare(<<"SQL"); SELECT imgdata FROM images WHERE images_id=?; SQL # SQL auführen $sth->execute($imageid); # Daten des BLOB lesen my @data = $sth->fetchrow_array; my $BLOB = shift @data; ### --------------------------------------------------- # Bilddaten erzeugen my $image = GD::Image->newFromJpegData($BLOB); # Bild ausgeben $|=1; print $cgi->header(-type=>'image/jpeg'); binmode(STDOUT); print STDOUT $image->jpeg; ### --------------------------------------------------- # Bild als BLOB aus Datei einlesen my $imgfilename = "test.jpg"; $image = GD::Image->newFromJpeg($imgfilename); $BLOB = $image->jpeg; # SQL-Abfrage zum "Speichern" des Bildes vorbereiten my sth = $dbh->prepare(<<"SQL"); UPDATE images SET imgdata=? WHERE images_id=?; SQL # SQL auführen $sth->execute($BLOB,$imageid); ### --------------------------------------------------- # Datenbank schließen beim Beenden des Skripts (kannst du auch woanders machen) END { $dbh->disconnect if defined($dbh); }
$dbh->{LongReadLen}
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
use DBI; use CGI; # Handle für die Ausgabe diverser CGI-"Sachen" my $cgi = CGI->new; # DB öffnen my $dbh = DBI->connect('dbi:Oracle:DB','username','password') or die $DBI::errstr; ### -------------------------------------------------- # SQL-Abfrage für das Auslesen des Bildes aus der DB vorbereiten my sth = $dbh->prepare(<<"SQL"); SELECT imgdata FROM images WHERE images_id=?; SQL # SQL auführen $sth->execute($imageid); # Daten des BLOB lesen my @data = $sth->fetchrow_array; my $BLOB = shift @data; ### --------------------------------------------------- # Bild ausgeben $|=1; print $cgi->header(-type=>'image/jpeg'); binmode(STDOUT); print STDOUT $BLOB; ### --------------------------------------------------- # Bild als BLOB aus Datei einlesen my $imgfilename = "test.jpg"; $if (open my $fh, '<', $imgfilename) { binmode($fh); local $/ = undef; # Slurp mode aktivieren $BLOB = <$fh>; # Daten komplett in einem Rutsch einlesen close $fh; } # SQL-Abfrage zum "Speichern" des Bildes vorbereiten my sth = $dbh->prepare(<<"SQL"); UPDATE images SET imgdata=? WHERE images_id=?; SQL # SQL auführen $sth->execute($BLOB,$imageid); ### --------------------------------------------------- # Datenbank schließen beim Beenden des Skripts (kannst du auch woanders machen) END { $dbh->disconnect if defined($dbh); }
Guest provisoftIch habe es so ausprobiert, mit dem Ergebnis, dass mir nicht das jpg angezeigt wird, sondern die Binär-Daten geprintet werden. Irgendwas mach ich wohl noch falsch ... ?
1 2 3 4 5 6 7 8
use CGI; my $cgi = CGI->new; $|=1; print $cgi->header(-type=>"image/jpeg",-charset=>""); binmode(STDOUT); print STDOUT $BLOB;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
$sqlStmtSel = "SELECT DATA FROM BINARY_DATA where ID = 97312"; $dbhsrc->{LongReadLen}=150000000; # Make sure buffer is big enough for BLOB $stmtSel = $dbhsrc->prepare($sqlStmtSel) || die "\nPrepare error:$DBI::errstr\n"; # Daten des BLOB lesen my @data = $stmtSel->fetchrow_array; my $BLOB = shift @data; # Handle für die Ausgabe diverser CGI-"Sachen" my $cgi = CGI->new; # Bild ausgeben $|=1; print $cgi->header(-type=>"image/jpeg",-charset=>""); binmode(STDOUT); #print STDOUT $BLOB; print "<p align='left'><img src=$BLOB></p>";
1 2 3 4 5
# Bild ausgeben $|=1; print $cgi->header(-type=>"image/jpeg",-charset=>""); binmode(STDOUT); #print STDOUT $BLOB;
print "<p align='left'><img src=$BLOB></p>";
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
my $cgi = CGI->new; my $bildid = $cgi->param('picid'); if (defined($bildid) and $bildid =~ /^\d+$/) { $sqlStmtSel = "SELECT DATA FROM BINARY_DATA WHERE ID = ?"; $dbhsrc->{LongReadLen}=150000000; # Make sure buffer is big enough for BLOB $stmtSel = $dbhsrc->prepare($sqlStmtSel) || die "\nPrepare error:$DBI::errstr\n"; $stmtSel = $dbhsrc->execute($bildid) || die "\nPrepare error:$DBI::errstr\n"; # Daten des BLOB lesen my @data = $stmtSel->fetchrow_array; my $BLOB = shift @data; if ($BLOB) { # Bild ausgeben $|=1; print $cgi->header(-type=>"image/jpeg",-charset=>""); binmode(STDOUT); print STDOUT $BLOB; } }
<img src="/cgi-bin/getpic.pl?picid=12345">