Joomla.it Forum
Non solo Joomla... => Sviluppo => : 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.
-
Ciao e benvenuto.
Posta cosa viene scritto nel cambo BLOB qaundo salvi.
-
Ciao, grazie ;0)
Nella colonna "immagine" sul db c'è scritto "[BLOB - 19B]".
Il 19B varia a seconda dell'immagine che carico.
-
dimenticavo... scrivi anche il codice che usi per far visualizzare l'immagine, una volta che la persona l'ha caricata.
-
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/
-
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?
-
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.
-
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;
?>
-
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;
?>
-
Ma questi metodi non funzionano... o non riesco a farli funzionare io :0(
-
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.
-
Forse questo può aiutare..
http://forum.joomla.org/viewtopic.php?p=1683395#p1683395 (http://forum.joomla.org/viewtopic.php?p=1683395#p1683395)
-
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...... "
:'( :'( :'( :'( :'(
-
Una domanda. Ma è proprio indispensabile usare il BLOB?
-
:)
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
-
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.
-
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?
???
-
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'.