Io posto una situazione in cui una serie di immagini vengono caricate via FTP all'interno di una cartella del db "/public/foto_ftp/" e successivamente, richiamando una pagina asp ad hoc, le cartelle (categorie) ed i file (foto) vengono inseriti nel db. Poiché l'esempio utilizza un db Access, ad ogni richimo della pagina di inserimento, si procede a compattare il db.
Nel caso in cui si inserisse una nuova cartella senza ritoccare le precedenti con le vecchie foto si potrebbe evitare di svuotare le tabelle ed aggiornarle semplicemente.
carica_db.asp
codice:
<%@ Language = VBScript%>
<%
server.ScriptTimeout = 3600
call vuota_db(oVuota_db)
call compatta_db(oCompatta_db)
call carica_db(oCarica_db)
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="it">
<head>
<title>Foto</title>
</head>
<body>
<%=oVuota_db%></p>
<%=oCompatta_db%></p>
<%=oCarica_db%></p>
</body>
</html>
common.asp
codice:
<%
dim connFoto
'******* Apertura db *********
sub dbConnect
Set connFoto = Server.CreateObject("ADODB.Connection")
connFoto.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.MapPath("/........mdb")
end sub
'*****************************
'******* Chiusure db *********
sub dbDisconnect
connFoto.close
set connFoto = nothing
end sub
'*****************************
'Vuoto le tabelle del db
'INPUT: -
'OUTPUT: -
sub vuota_db(byRef oVuota_db)
oVuota_db = ""
dbConnect
sql = "DELETE FROM tFoto"
connFoto.Execute(sql)
sql = "DELETE FROM tCat"
connFoto.Execute(sql)
dbDisconnect
oVuota_db = oVuota_db &"1) SVUOTAMENTO DATABASE"
oVuota_db = oVuota_db &"
Il database è stato svuotato con successo."
end sub
'Compatto il db
'INPUT: -
'OUTPUT: -
sub compatta_db(byRef oCompatta_db)
oCompatta_db = ""
'creo un array con i nomi dei database da comprimere senza estensione .mdb
dbasearray = array("foto_ftp_db")
for i = lbound(dbasearray) to ubound(dbasearray)
'comprimo il database creandone una copia compressa e mantenendo l'originale
oCompatta_db = oCompatta_db &"2) COMPRESSIONE DATABASE "& dbasearray(i) &".mdb"
Set miodb = CreateObject("DAO.DBEngine.36")
miodb.CompactDatabase server.MapPath("/mdb-database/"& dbasearray(i) &".mdb"), server.MapPath("/mdb-database/" & dbasearray(i) & "_tmp.mdb")
oCompatta_db = oCompatta_db &"
Il database "& dbasearray(i) &".mdb è stato compresso con successo."
Set miodb=Nothing
' elimino il vecchio database (quello originale)
Dim obJfso, objFile
oCompatta_db = oCompatta_db &"
3) CANCELLAZIONE VECCHIO DATABASE "& dbasearray(i) &".mdb"
Set objFso=Server.CreateObject("scripting.filesystemobject")
Set objFile=objFso.GetFile(server.MapPath("/mdb-database/"& dbasearray(i) &".mdb"))
objFile.Delete
oCompatta_db = oCompatta_db &"
Il vecchio database "& dbasearray(i) &".mdb è stato cancellato con successo."
Set objFSO = Nothing
Set objFile = Nothing
' rinomino il database temporaneo con il nome di quello originale
oCompatta_db = oCompatta_db &"
4) RINOMINO DEL DATABASE "& dbasearray(i) &".mdb"
Dim myobjFSO
Set myobjFSO = CreateObject("Scripting.FileSystemObject")
myobjFSO.MoveFile server.MapPath("/mdb-database/"& dbasearray(i) &"_tmp.mdb"), server.MapPath("/mdb-database/"& dbasearray(i) &".mdb")
oCompatta_db = oCompatta_db &"
Il database "& dbasearray(i) &".mdb è stato rinominato con successo."
Set myobjFSO = Nothing
next
end sub
'Carico il db con le cartelle e le foto presenti
'INPUT: -
'OUTPUT: -
sub carica_db(Byref oCarica_db)
oCarica_db = ""
oCarica_db = oCarica_db &"5) LETTURA DELLE CARTELLE E DELLE FOTO"
Dim fso, f, f1, fc, s, cont
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(server.MapPath("/public/foto_ftp/"))
Set cartelle = f.SubFolders
dbConnect
For Each cartella in cartelle
cat_nome = cartella.Name
cat_data_creazione = cartella.DateCreated
cat_data_creazione = dataToDataDb(left(cat_data_creazione,10))
cat_data_ultima_modifica = cartella.DateLastModified
cat_data_ultima_modifica = dataToDataDb(left(cat_data_ultima_modifica,10))
oCarica_db = oCarica_db &"
Cartella: "& cat_nome &""
'response.Write cat_nome & "
"
'response.Write cat_data_creazione & "
"
'response.Write cat_data_ultima_modifica & "
"
'Inserisco la cartella
sql = "INSERT INTO tCat (cat_nome,cat_data_creazione,cat_data_ultima_modifica) "
sql = sql &"VALUES ('"& cat_nome &"', '"& cat_data_creazione &"', '"& cat_data_ultima_modifica &"')"
connFoto.Execute(sql)
'Recupero l'ultima categoria inserita
cat_id = 0
sql = "SELECT @@IDENTITY FROM tCat"
set rs = connFoto.Execute(sql)
if not rs.EOF then
cat_id = rs(0)
end if
set rs = nothing
if cat_id > 0 then
'Scorro i file della categoria
Set f1 = fso.GetFolder(server.MapPath("/public/foto_ftp/"& cat_nome))
Set file = f1.Files
For Each elem in file
'Recupero solo quelle piccole (prefisso tn_)
if left(elem.name,3) = "tn_" then
foto_piccola = elem.name
foto_grande = mid(foto_piccola,4,len(foto_piccola)-3)
foto_data_creazione = elem.DateCreated
foto_data_creazione = dataToDataDb(left(foto_data_creazione,10))
foto_data_ultima_modifica = elem.DateLastModified
foto_data_ultima_modifica = dataToDataDb(left(foto_data_ultima_modifica,10))
oCarica_db = oCarica_db &"
--> Foto (piccola): "& foto_piccola &""
'response.Write foto_piccola & "
"
'response.Write foto_grande & "
"
'response.Write foto_data_creazione & "
"
'response.Write foto_data_ultima_modifica & "
"
'Inserisco le foto della categoria
sql = "INSERT INTO tFoto (cat_id,foto_piccola,foto_grande,foto_data_creazione,foto_data_ultima_modifica) "
sql = sql &"VALUES ("& cat_id &", '"& foto_piccola &"', '"& foto_grande &"', '"& foto_data_creazione &"', '"& foto_data_ultima_modifica &"')"
connFoto.Execute(sql)
end if
next
end if
Next
dbDisconnect
set f1 = nothing
set f = nothing
set fso = nothing
oCarica_db = oCarica_db &"
Caricamento effettuato con successo. Processo terminato."
end sub
'************* Funzione a cui passo una data per il Db ******
function dataToDataDb(data)
' Preleva dalla data l'anno
f_aa = Year(data)
' Preleva dalla data il mese
f_mm = right("0" & Month(data), 2)
' Preleva dalla data il giorno
f_gg = right("0" & Day(data), 2)
'Concatena i valori in un unico numero
dataToDataDb = f_aa &"-"& f_mm &"-"& f_gg
end function
%>
Questo è un esempio per partire.
Nel db come si vede vengono inserite anche le date di creazione e modifica dei singoli file nel caso in cui si desideri ordinare le immagine per data di inserimento o altro.
Roby