Back to top

Autore Topic: Visualizzare immagine da campo BLOB  (Letto 9898 volte)

Offline AlessioZ

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Visualizzare immagine da campo BLOB
« il: 16 Lug 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:
Codice: [Seleziona]
$data = JRequest::get('post');      

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

e salvo:
Codice: [Seleziona]
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:
Codice: [Seleziona]
      $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:
Codice: [Seleziona]
$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 è:
Codice: [Seleziona]
<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.

teakor

  • Visitatore
Re:Visualizzare immagine da campo BLOB
« Risposta #1 il: 16 Lug 2009, 12:35:09 »
Ciao e benvenuto.

Posta cosa viene scritto nel cambo BLOB qaundo salvi.

Offline AlessioZ

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #2 il: 16 Lug 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.


teakor

  • Visitatore
Re:Visualizzare immagine da campo BLOB
« Risposta #3 il: 16 Lug 2009, 13:06:08 »
dimenticavo... scrivi anche il codice che usi per far visualizzare l'immagine, una volta che la persona l'ha caricata.

Offline AlessioZ

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #4 il: 16 Lug 2009, 13:22:04 »
Utilizzo la stessa pagina "default.php" per Inserimento e Modifica.
Per visualizzare l'immagine ho provato:

Codice: [Seleziona]
<?php
echo  $this->event->immagine ;
?>

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


poi ho intrugliato abbastanza provando altre soluzioni che nemmeno ricordo più :0/
« Ultima modifica: 16 Lug 2009, 13:24:14 da AlessioZ »

teakor

  • Visitatore
Re:Visualizzare immagine da campo BLOB
« Risposta #5 il: 16 Lug 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?

Offline AlessioZ

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #6 il: 16 Lug 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.

teakor

  • Visitatore
Re:Visualizzare immagine da campo BLOB
« Risposta #7 il: 16 Lug 2009, 13:40:48 »
non conoscevo il campo di tipo BLOB ;)

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

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


teakor

  • Visitatore
Re:Visualizzare immagine da campo BLOB
« Risposta #8 il: 16 Lug 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 ;)

Codice: [Seleziona]
<?php
header
("Content-Type: " $this->event->tipo);
echo 
$this->event->immagine
?>

Offline AlessioZ

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #9 il: 16 Lug 2009, 13:59:46 »
Ma questi metodi non funzionano...  o non riesco a farli funzionare io :0(

teakor

  • Visitatore
Re:Visualizzare immagine da campo BLOB
« Risposta #10 il: 16 Lug 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.

Offline copesc

  • Appassionato
  • ***
  • Post: 500
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #11 il: 17 Lug 2009, 12:25:02 »
Extensioni e Template per Joomla

Offline AlessioZ

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #12 il: 17 Lug 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......  "

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


teakor

  • Visitatore
Re:Visualizzare immagine da campo BLOB
« Risposta #13 il: 18 Lug 2009, 08:36:04 »
Una domanda. Ma è proprio indispensabile usare il BLOB?

Offline AlessioZ

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #14 il: 18 Lug 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


Offline gmassi

  • Esploratore
  • **
  • Post: 89
  • Sesso: Maschio
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #15 il: 18 Lug 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.

Offline AlessioZ

  • Nuovo arrivato
  • *
  • Post: 8
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #16 il: 18 Lug 2009, 12:27:14 »
In quel caso la funzione:
Codice: [Seleziona]
   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?
 ???


Offline gmassi

  • Esploratore
  • **
  • Post: 89
  • Sesso: Maschio
    • Mostra profilo
Re:Visualizzare immagine da campo BLOB
« Risposta #17 il: 18 Lug 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

Codice: [Seleziona]
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'.

 



Web Design Bolzano Kreatif