Joomla.it Forum

Non solo Joomla... => Sviluppo => : AlessioZ 16 Jul 2009, 12:29:33

: Visualizzare immagine da campo BLOB
: AlessioZ 16 Jul 2009, 12:29:33
Salve a tutti,
pensavo che avrei trovato in rete un mare di risposte a questo problema ma o mi sbagliavo oppure cerco nel modo sbagliato!!

Comunque...

sto realizzando un componente abbastanza semplice di archiviazione e visualizzazione dati e tra gli altri dati vorrei inserire una Immagine.
Lo so che ora mi direte che "generalmente non si fa" ma ho volutamente messo l'Immagine in un campo BLOB sul db.

In fase di inserimento sembra funzionare tutto bene.
Prendo i dati dal Form:
:
$data = JRequest::get('post');      

eseguo il Bind:
:
$row =& $this->getTable();
if(!$row->bind($data)) {
$this->setError($row->getError());
return false;
}
      

e salvo:
:
if(!$row->store()) {
$this->setError($row->getError());
return false;
}


Tutti gli altri dati vengono Inseriti e/o Modificati correttamente.
Guardando nel DB dalla console vedo che inserisce qualcosa anche nel campo BLOB.

I dolori arrivano in visualizzazione.
Vedo tutti i campi ma non capisco come visualizzare l'Immagine.

Recupero i Dati dal DB:
:
      $sql = 'SELECT * FROM #__NomeTabA a, #__NomeTabB b '
. ' where a.id_A = b.id_B '
. ' and a.id = '. $this->_id;
$this->_db->setQuery($sql);
$this->_data = $this->_db->loadObject();
return $this->_data;
      

li metto a disposizione del FrontEnd:
:
$this->assignRef('event', $event);

ma nella schermata vedo tutti i campi tranne l'immagine di cui mi compare soltanto il Nome.

Il Campo a FrontEnd in fase di Inserimento è:
:
<td width="100" align="right" class="key">
<label for="immagine">
<?php echo JText::_('Immagine'); ?>:
</label>
</td>
<td> 
<input name="immagine" type="file" value="<?php echo $this->event->immagine;?>" >
</td>

Per la visualizzazione ho provato un po di soluzioni che ho trovato in giro ma nessuna pare funzionare.
Quale è il codice giusto per visualizzare l'immagine presa dal campo BLOB?
Devo trattare i qualche maniera il dato prima di mandarlo al FrontEnd?
Non basta scrivere "$this->event->immagine" per riferirsi all'Immagine?

Spero si sia capito bene o male quello che mi serve.
In caso contrario chiedete pure ultieriori info che vi servono.

Grazie,
Alessio.
: Re:Visualizzare immagine da campo BLOB
: teakor 16 Jul 2009, 12:35:09
Ciao e benvenuto.

Posta cosa viene scritto nel cambo BLOB qaundo salvi.
: Re:Visualizzare immagine da campo BLOB
: AlessioZ 16 Jul 2009, 12:52:37
Ciao, grazie ;0)

Nella colonna "immagine" sul db c'è scritto "[BLOB - 19B]".
Il 19B varia a seconda dell'immagine che carico.

: Re:Visualizzare immagine da campo BLOB
: teakor 16 Jul 2009, 13:06:08
dimenticavo... scrivi anche il codice che usi per far visualizzare l'immagine, una volta che la persona l'ha caricata.
: Re:Visualizzare immagine da campo BLOB
: AlessioZ 16 Jul 2009, 13:22:04
Utilizzo la stessa pagina "default.php" per Inserimento e Modifica.
Per visualizzare l'immagine ho provato:

:
<?php
echo  $this->event->immagine ;
?>

oppure (ma questo dubito anche possa essere corretto)
:
<?php
header
("Content-Type: jpg");
echo 
$this->event->immagine
?>


poi ho intrugliato abbastanza provando altre soluzioni che nemmeno ricordo più :0/
: Re:Visualizzare immagine da campo BLOB
: teakor 16 Jul 2009, 13:28:44
Forse mi sbaglio ma così facendo gli passi solo il nome salvato in BLOB.

Se non gli passi l'indirizzo dell'immagine e l'estensione, come fa a visualizzare l'immagine?

Poi una volta caricato nel db il nome dell'immagine, effettui l'upload del file, rinominandolo come nel db?
: Re:Visualizzare immagine da campo BLOB
: AlessioZ 16 Jul 2009, 13:33:29
E no...  direi di no.
Da quel che ho capito nel campo BLOB io dovrei poter caricare l'immagine tutta. E se non ho capito male il salvataggio dell'immagine sul db avviene con la semplice Insert come un qualsiasi campo alfabetico o numerico.
Di questo sono abbastanza sicuro...  credo ;0)))

Nel BLOB c'è l'immagine non l'indirizzo di una immagine che si trova fisicamente da un'altra parte.
: Re:Visualizzare immagine da campo BLOB
: teakor 16 Jul 2009, 13:40:48
non conoscevo il campo di tipo BLOB ;)

comuque ho cercato e trovato qualcosa lo stesso metodo che usi tu:

:
<?php
header
("Content-Type: jpg");
echo 
$this->event->immagine
?>

: Re:Visualizzare immagine da campo BLOB
: teakor 16 Jul 2009, 13:42:23
Aggiungo che quando salvi il file in BLOB, ti conviene anche estrapolare il tipo di file immagine e salvarlo nel db. Hai visto mai che qualcuno carichi anzi un gif invece di un jpg ;)

:
<?php
header
("Content-Type: " $this->event->tipo);
echo 
$this->event->immagine
?>
: Re:Visualizzare immagine da campo BLOB
: AlessioZ 16 Jul 2009, 13:59:46
Ma questi metodi non funzionano...  o non riesco a farli funzionare io :0(
: Re:Visualizzare immagine da campo BLOB
: teakor 16 Jul 2009, 14:05:12
sinceramente non ho mai usato questo metodo. preferisco far caricare l'immagine sul server e salvare il nome del file nel db e poi quando vado a visualizzare l'immagine ricostruisco l'indirizzo.
: Re:Visualizzare immagine da campo BLOB
: copesc 17 Jul 2009, 12:25:02
Forse questo può aiutare..

http://forum.joomla.org/viewtopic.php?p=1683395#p1683395 (http://forum.joomla.org/viewtopic.php?p=1683395#p1683395)
: Re:Visualizzare immagine da campo BLOB
: AlessioZ 17 Jul 2009, 16:15:08
Mi sto per arrendere!!!

Non riesco a farlo funzionare...  al massimo riesco a vedere:

"�tm;B��2jV�.c�l�� �~Z�uo��ZYC�u+L̛��!8.F8�SE��g�Y_%L,[��F�� xn���K����O��a���|/ ��[Z��t��r����1!�~V�_QXΜ!dzp枩i�������9�����-m��l���!�l��޾G�?g xi�n,�e�,������-��������r��SnZJǏ��1����ϖ�W���h��#f\���:��}s^��y 4Q� (���<�MA�ux���&�N�bđ$�������=�i>�s{�F �kk$�Z��v)8��־�U����G���T!�q�$쟟�s���>��ş����od2߶�1w.J�y� A�j��mM�ϋ3�w �z�_@��8��ǔ�5�ӓ�m�?\���a�5��w��I���V����d~ð��K:�r� 트��ή'�}��x�I�ӵxn�O�k�A���y�[P��e����A(��Vb�F1�FI�j�Q~�Ew=|4ԩsϱ��[�� ��+��Hd Wt���{�{�k���㲻�w?�S��u5<���O��x���Ǐ5��۫�����F......  "

 :'( :'( :'( :'( :'(

: Re:Visualizzare immagine da campo BLOB
: teakor 18 Jul 2009, 08:36:04
Una domanda. Ma è proprio indispensabile usare il BLOB?
: Re:Visualizzare immagine da campo BLOB
: AlessioZ 18 Jul 2009, 12:02:34
 :)

Naturalmente no, non è affatto Indispensabile  :P

Però si può fare, c'è chi lo fa e non capisco perché a me non deve riuscire.
Quindi credo che per finire il mio componente metterò le immagini in una directory mettendo sul db soltanto i nomi...  ma voglio poi sviluppare un altro componente semplice (e inutile) che salva una immagine in un BLOB e poi la visualizza. Mica può vincere lui!!!   :P

: Re:Visualizzare immagine da campo BLOB
: gmassi 18 Jul 2009, 12:12:53
Hai visto il post segnalato da Flavio? Il metodo da seguire è il secondo quello di serena42, creare una funzione apposita nel componente e usare format=raw nella URL.
: Re:Visualizzare immagine da campo BLOB
: AlessioZ 18 Jul 2009, 12:27:14
In quel caso la funzione:
:
   function showImage(){
      header('Content-type: image/jpeg');
                ...sql queries....
      echo $content->image;
   }

in quale Controller va?

In quello Principale o nel Derivato?
Inoltre secondo questo sistema dovrei rifare le Query (...sql queries....) per prendere l'immagine...  ma io i dati dell'immagine li avrei già a disposizione visto che visualizzo già tutti gli altri dati!  O no?
 ???

: Re:Visualizzare immagine da campo BLOB
: gmassi 18 Jul 2009, 18:00:00
La query la devi rifare comunque anche se la prendi dal db è comunque un'immagine e deve essere ricevuta dal browser in una richiesta separata.

Se fai il link come nell'esempio con task=showImage dovrai creare un metodo showImage() nella classe del controller in controller.php

:
class xxxController extends JController {
...
function showImage() {
 //fai la query
 $document =& JFactory::getDocument();
 $document->setMimeEncoding('image/jpeg');
 header('Content-type: image/jpeg');
//echo del contenuto del campo blob
 return;
}
...
}
Secondo me serve anche setMimeEncoding e devi passargli il valore giusto in base all'immagine (image/jpeg image/png image/gif ecc.). Prova un po'.