Files ed immagini in MySQL

Creazione della tabella dei files

Per prima cosa dovremo creare una tabella all'interno del nostro database MySQL che conterrà i files. Questa tabella sarà costituita dai seguenti campi:

Campo     Tipo
--------- --------------
id_file   int(11) chiave primaria (autoincrement)
nome_file varchar(255)
tipo_file varchar(128)
dati_file blob

Vediamo il significato e l'utilità dei diversi campi:

  • id_file
    si tratta di un numero progressivo (ID) che ci servirà per identificare univocamente un file nel database.
  • nome_file
    conterrà il nome del file che va memorizzato esplicitamente.
  • tipo_file
    con questo campo teniamo nota del tipo di file. Memorizzeremo una stringa (tipo MIME) che ci verrà fornita dal browser durante l'upload del file e che ci tornerà utile quando dovremo reinviare il file all'utente.
  • dati_file
    questo campo conterrà il file vero e proprio, ovvero tutti i byte che lo costituiscono.

Di particolare interessa è il campo dati_file di tipo blob. Il tipo blob (binary large object) è proprio quello che MySQL mette a disposizione per la memorizzazione di grosse quantità di dati binari ed è quindi adatto a conservare un intero file. In realtà ci sono diversi tipi blob, ciascuno caratterizzato da un valore massimo di byte che può contenere:

Nome campo Massima capacità
TINYBLOB

256 Byte

BLOB

64 KByte

MEDIUMBLOB

16 MByte

LONGBLOB

4 GByte

Per creare la tabella possiamo eseguire la seguente query (ad esempio usando phpMyAdmin o direttamente con il MySQL Command Line Client):

 

CREATE TABLE tabella_files ( 
	id_file int(11) NOT NULL auto_increment, 
	nome_file varchar(255) default NULL, 
	tipo_file varchar(128) default NULL, 
	dati_file blob, 
	PRIMARY KEY (`id_file`) 
);

 

13 commenti

1 paolo paolo mercoledì 28 luglio 2010, ore 00:38
Complimenti per lo script!
L' unica cosa che mi da errore nella riga 15 nella pagina mostra.php

header('Content-Type: '.$tmp['tipo_file']);

Carico dei jpg e quando vado a cliccare sul link per visualizzare l' immagine mi escono tutti dei simboli strani , segno che non ha codificato l' immagine jpg. come posso fare per risolvere il problema? grazie
2 andrea andrea martedì 21 settembre 2010, ore 09:37
io ho lo stesso problema... hai risolto? se si come?
grazie mille

Andrea
3 Gianni Tomasicchio Gianni Tomasicchio martedì 21 settembre 2010, ore 10:09
Verificate l'inserimento accidentale di spazi o "a capo" in testa o in coda agli script.
4 massimiliano massimiliano giovedì 28 ottobre 2010, ore 09:18
diciamo semplicemente che dopo averlo modificato coni parametri di connesisone miei personali 1no inserisce alcun file nel data base e 2 i file come gia detto da altri utenti non vieve visualizzato con immagini ma simboli ^_^.
5 Fabio Fabio venerdì 11 febbraio 2011, ore 19:58
Stesso problema.
C'è una soluzione?
Grazie
6 Gianni Tomasicchio Gianni Tomasicchio venerdì 11 febbraio 2011, ore 20:23
Per qualsiasi problema riscontrato con gli script dell'articolo potete scrivere nel nostro forum.
7 davide davide giovedì 24 marzo 2011, ore 00:00
Ciao ho fatto esattamente quello che hai detto ma non mi salva il file sicuramente per il blob..può essere qualche impostazione?
8 Gianni Tomasicchio Gianni Tomasicchio giovedì 24 marzo 2011, ore 08:53
Ricevi qualche messaggio di errore?
9 alykiss alykiss mercoledì 13 aprile 2011, ore 17:42
ciao

due richieste in un giorno forse sono troppe:-)

veniamo a questo codice, intanto lo uso con wordpress, quindi ho dovuto cambiare qualcosa, ovviamente sono andato per intuito visto che di php non capisco un'H, ho eliminato queste due righe
// connessione e selezione del database
mysql_connect('localhost', 'utente_db', 'password_db')
or die('Connessione non riuscita: ' . mysql_error());

if(!mysql_select_db('nome_database'))
die('Selezione database fallita!');

connessione al database la fa wordpress
ho creato il db
ho inserito un'immagine .bmp
quando la richiamo però mi da questo errore:
Query non valida: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1.

nella linea 1 non c'è niente, quindi non capisco

aspetto notizie con impazienza grazie :-)
10 seingh seingh giovedì 21 aprile 2011, ore 11:37
Gli header vanno in cima al codice, perciò l'errore può essere quello.
11 lollo89 lollo89 sabato 7 maggio 2011, ore 16:38
Salve, invece di far stampare l'immagine in una pagina unica, e possibile far stampare l'immagine da una tag IMG.
Grazie
12 Gianni Tomasicchio Gianni Tomasicchio domenica 8 maggio 2011, ore 08:16
Si, basta impostare l'url del tag img in modo che punti allo script mostra.php:

<img src="mostra.php?id=123" />
13 tia96 tia96 martedì 19 luglio 2011, ore 10:14
Le immagini non mele visualizza complete, ma solo a metà, come risolvo?
Effettua l'accesso o registrati per inserire un commento