Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > картинка + текст


Автор: joaquin 23.1.2011, 13:03
Добрый день уважаемые форумчане.
Есть задача вывода картинок из mysql на страницу с текстом.Из таблицы image вывожу картинку (соотв. код приведен ниже) при задании 'Conten-type: image/jpg'.Вопрос в том как вывести картинку и далее отобразить какой-либо текст.

Пример кода:

#!/usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use CGI qw ( :standard );
#Задаем местанахождение файла конфигурации
use lib "/home/web/cgi-bin/config";
#Подключаем файл конфигурации
use test qw( :DEFAULT :admin  &f_date_gm);
print "Expired: Sun, 27 october 2010 07:00:00 GMT\n";
print "Last-Modified: " .&f_date_gm() ."GMT\n";
print "Cache-Control: no-store, no-cache, must-revalidate\n";
print "Pragma: no-cache\n";


#Подключаемся к базе данных
my $ds = 'DBI:mysql:' . $DATA{'DB'} . ':' .$DATA{'HOST'};
my $db = DBI->connect($ds, $DATA{'LOGIN'}, $DATA{'PASSW'});
if (!$db) {
        print "<div class=\"err\">Не удалось установить ";
        print "соединение с базой данных</div>";
        &f_footer_user();
        exit();
        }
        $db->do("set names cp1251");
        
my $sth= $db->prepare("SELECT  foto FROM image WHERE id=1");
          $sth->execute();
          my @row = $sth->fetchrow_array;
          my $image = "$row[0]";

my $query = CGI->new;
open(my $FH, $image);
my $picture = do { local $/ = undef; <$FH> };
close $FH;

print $query->header(-type => 'image/jpeg');        

binmode STDOUT;
print $picture;
print "<p>Следующий за картинкой текст</p>\n";


Заранее спасибо.

Автор: Jimy 23.1.2011, 16:04
либо двумя запросами:
1. текст. В тексте будет HTML тег <img>, в котором будет указан путь к картинке, и прочие ее атрибуты.
2. картинка, которую браузер запросит для вставки в текст вместо тега <IMG>.

Тогда, приведенный Вами код, это запрос №2.

либо вставкой кода картинки прямо в HTML разметку:
<img src="data:image/gif;base64,двоичный_код_изображения_закодированный_в_base64" />
тогда за один запрос можно отправить и картинку и "текст"


Автор: joaquin 24.1.2011, 08:54
Спасибо за помощь.Подскажите пожалуста как связать два запроса.Если есть возможность предоставте пожалуста пример какого-либо кода.

Автор: joaquin 24.1.2011, 09:40
Решено.Благодаря предоставленному ответу от Jimy,за что ему огромное спасибо!
В основной файл main.pl (приведен ниже) вставил приведенный выше код  image.pl через тег <IMG>:

#!/usr/bin/perl
#main.pl
use CGI qw ( :standard );
#Задаем местанахождение файла конфигурации
use lib "/home/web/cgi-bin/config";
#Подключаем файл конфигурации
use test qw( :DEFAULT :admin  &f_date_gm);
print "Expired: Sun, 27 october 2010 07:00:00 GMT\n";
print "Last-Modified: " .&f_date_gm() ."GMT\n";
print "Cache-Control: no-store, no-cache, must-revalidate\n";
print "Pragma: no-cache\n";
print "Content-type: text/html\n\n";



print "<img src=\"image.pl\" alt=\"\"\/>";
print "<p>Hello</p>\n";


Только вот назрел вопрос относительно 2 методаsmile Можно поподробней относительно base64.Желательно с примером кода.

Автор: shamber 24.1.2011, 11:32
joaquin, поищите по форуму, пример кода уже проскакивал здесь

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)