Modifica file upload in ASP

  • Creatore Discussione Creatore Discussione LucaVet
  • Data di inizio Data di inizio
Stato
Chiusa ad ulteriori risposte.

LucaVet

Nuovo Utente
29 Lug 2021
2
0
1
Ciao a tutti,
chiedo scusa in anticipo se per caso questa richiesta già è stata affrontata in altri post, ho fatto una ricerca ma non ho trovato nulla che mi serviva nello specifico.

Seconda premessa, non sono ai vostri livelli in ASP, non faccio lo sviluppatore per mestiere pertanto abbiate un pizzico di pasienza.

Veniamo a noi, ho un piccolo DataBase, per una mia collezione è dovrei cambiare / modificare la pagina di upload di 1 immagine con la possibilità di arrivare a 4.

Pagina Seleziona Immagini:

<form enctype="multipart/form-data" method=post onSubmit="return validate(form);" action="inserisci_nuovo_session_reg.asp" name="form">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center" valign="middle"><div id="image-preview">
<label for="image-upload" id="image-label">Seleziona l'Immagine</label>
<input type="file" name="foto1" id="image-upload" />
</div></td>
<td align="center" valign="middle"><div id="image-preview1">
<label1 for="image-upload1" id="image-label">Seleziona l'Immagine</label1>
<input type="file" name="foto2" id="image-upload1" />
</div></td>

</tr>
<tr>
<td align="center" valign="middle"><div id="image-preview2">
<label2 for="image-upload2" id="image-label">Seleziona l'Immagine</label2>
<input type="file" name="foto3" id="image-upload2" />
</div></td>
<td align="center" valign="middle"><div id="image-preview3">
<label3 for="image-upload3" id="image-label">Seleziona l'Immagine</label3>
<input type="file" name="foto4" id="image-upload3" />
</div></td>

</tr>

Ovviamente nel DB MYSQL ho i campi Foto1, 2, 3 e 4.
Con delle session mi sto tirando indietro dei dati che ho inserito in un precedente form.

File di upload e scrittura - uoload.asp

<%@LANGUAGE="VBSCRIPT"%>
<!--METADATA TYPE="typelib" UUID="CD000000-8B95-11D1-82DB-00C04FB1625D" NAME="CDO for Windows 2000 Type Library" -->
<!--METADATA TYPE="typelib" UUID="00000205-0000-0010-8000-00AA006D2EA4" NAME="ADODB Type Library" -->
<!--#include file="conn.asp" -->

<%

Dim folder
Dim data_inserimento
Dim categoria
Dim serie
Dim nome
Dim cognome
Dim pronome
Dim protettore_protettrice
Dim patrone_di
......

Dim byteCount
Dim RequestBin
Dim PosBeg
Dim i
Dim char
Dim PosEnd
Dim boundary
Dim boundaryPos
Dim Pos
Dim intCount
Dim Name
Dim PosFile
Dim PosBound
Dim Value
Dim FileName
Dim ContentType
Dim nome_file
Dim Conn
Dim filepathname
Dim ScriptObject
Dim MyFile
Dim Sql
Dim Rs



' //// Directory dove carico il file (la cartella ha i permessi in scrittura)
folder = "/public/immagini"


Response.Expires=0
Response.Buffer = TRUE
Response.Clear

Sub BuildUploadRequest(RequestBin)
PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)
Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")
'Get an object name
Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
Pos = InstrB(Pos,RequestBin,getByteString("name="))
PosBeg = Pos+6
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
PosBound = InstrB(PosEnd,RequestBin,boundary)
If PosFile<>0 AND (PosFile<PosBound) Then
PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType
PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
Else
Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
PosBeg = Pos+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
End If
UploadControl.Add "Value" , Value
UploadRequest.Add name, UploadControl
BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
Loop
End Sub
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
Next
End Function

byteCount = Request.TotalBytes

RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin

' //// Fine Componente Upload

' //// riempio le variabili con valori proveninti dalla form
'progressivo = UploadRequest.Item("progressivo").Item("Value")
'data_inserimento = UploadRequest.Item("data_inserimento").Item("Value")
categoria = UploadRequest.Item("categoria").Item("Value")
serie = UploadRequest.Item("serie").Item("Value")
nome = UploadRequest.Item("nome").Item("Value")
cognome = UploadRequest.Item("cognome").Item("Value")
pronome = UploadRequest.Item("pronome").Item("Value")
protettore_protettrice = UploadRequest.Item("protettore_protettrice").Item("Value")
patrone_di = UploadRequest.Item("patrone_di").Item("Value")
........


' //// controllo che la form sia state regolarmente popolata
'If IsNull(categoria) OR categoria = "" OR IsNull(serie) OR serie = "" Then
'Response.Write ("<center><br><b>CAMPI OBBLIGATORI!</b><br><br><a href='javascript:history.back()'><b>RITORNA</b></a></center>")
'Response.End
'End if


'etas=Datediff("yyyy",data_inserimento)


Set conn = Server.CreateObject("ADODB.Connection")

conn.Open "Driver={MySQL ODBC 3.51 Driver};SERVER=;Database=Sql1_1;port=;UID=Sql;PWD=;"

' //// creo il file nella folder
if UploadRequest.Item("foto1").Item("FileName")="" then

Else

contentType = UploadRequest.Item("foto1").Item("ContentType")
filepathname = UploadRequest.Item("foto1").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("foto1").Item("Value")

Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

Set MyFile = ScriptObject.CreateTextFile(Server.mappath(folder)&"\"&filename)

For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next
MyFile.Close

End if

' //// seleziono la tabella dove scrivero l'ora, il titolo ed il nome del file
Sql = "Select * FROM santini"

Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open SQL, Conn, 1, 2

' //// aggiugo un nuovo record alla tabella
Rs.AddNew
Rs("data_inserimento") = data_inserimento
Rs("categoria") = categoria
Rs("serie") = serie
Rs("nome") = nome
Rs("cognome") = cognome
Rs("pronome") = pronome
Rs("protettore_protettrice") = protettore_protettrice
Rs("patrone_di") = patrone_di
Rs("reliqua") = reliqua
.......
Rs("foto1") = filename
Rs("foto2") = filename
Rs("foto3") = filename
Rs("foto4") = filename
Rs("note") = note


categoria=replace(categoria,"'","''")
serie=replace(serie,"'","''")
nome=replace(nome,"'","''")
cognome=replace(cognome,"'","''")
pronome=replace(pronome,"'","''")
protettore_protettrice=replace(protettore_protettrice,"'","''")
patrone_di=replace(patrone_di,"'","''")
reliqua=replace(reliqua,"'","''")
......
foto1=replace(foto1,"'","''")
foto2=replace(foto2,"'","''")
foto3=replace(foto3,"'","''")
foto4=replace(foto4,"'","''")
note=replace(note,"'","''")


'Rs("data_inserimento") = date()
Rs.UpDate

' //// chiudo il record set e libero le risorse
Rs.Close
Set Rs = Nothing


' //// chiudo la connessione e libero le risorse
Conn.Close
Set Conn = Nothing

' //// carico la pagina di risposta e stampo a video il link al file caricato
Response.Redirect("registrazione_effettuata.asp#ok")
%>


Se carico 1 immagine va bene, se ne carico di più nei campi del DB mi inserisce l'ultima che ho selezionato in tutti e 4 campi foto :(

Vi chiedo se potreste essere cosi gentili e pazienti nel darmi qualche dritta su come modificarlo (credo che sia possibile) al fine di poter caricare tutte e 4 foto.

Grazie mille!
 
codice.JPG
 
Ciao a tutti,
chiedo scusa in anticipo se per caso questa richiesta già è stata affrontata in altri post, ho fatto una ricerca ma non ho trovato nulla che mi serviva nello specifico.

Seconda premessa, non sono ai vostri livelli in ASP, non faccio lo sviluppatore per mestiere pertanto abbiate un pizzico di pasienza.

Veniamo a noi, ho un piccolo DataBase, per una mia collezione è dovrei cambiare / modificare la pagina di upload di 1 immagine con la possibilità di arrivare a 4.

Pagina Seleziona Immagini:

<form enctype="multipart/form-data" method=post onSubmit="return validate(form);" action="inserisci_nuovo_session_reg.asp" name="form">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center" valign="middle"><div id="image-preview">
<label for="image-upload" id="image-label">Seleziona l'Immagine</label>
<input type="file" name="foto1" id="image-upload" />
</div></td>
<td align="center" valign="middle"><div id="image-preview1">
<label1 for="image-upload1" id="image-label">Seleziona l'Immagine</label1>
<input type="file" name="foto2" id="image-upload1" />
</div></td>

</tr>
<tr>
<td align="center" valign="middle"><div id="image-preview2">
<label2 for="image-upload2" id="image-label">Seleziona l'Immagine</label2>
<input type="file" name="foto3" id="image-upload2" />
</div></td>
<td align="center" valign="middle"><div id="image-preview3">
<label3 for="image-upload3" id="image-label">Seleziona l'Immagine</label3>
<input type="file" name="foto4" id="image-upload3" />
</div></td>

</tr>

Ovviamente nel DB MYSQL ho i campi Foto1, 2, 3 e 4.
Con delle session mi sto tirando indietro dei dati che ho inserito in un precedente form.

File di upload e scrittura - uoload.asp

<%@LANGUAGE="VBSCRIPT"%>
<!--METADATA TYPE="typelib" UUID="CD000000-8B95-11D1-82DB-00C04FB1625D" NAME="CDO for Windows 2000 Type Library" -->
<!--METADATA TYPE="typelib" UUID="00000205-0000-0010-8000-00AA006D2EA4" NAME="ADODB Type Library" -->
<!--#include file="conn.asp" -->

<%

Dim folder
Dim data_inserimento
Dim categoria
Dim serie
Dim nome
Dim cognome
Dim pronome
Dim protettore_protettrice
Dim patrone_di
......

Dim byteCount
Dim RequestBin
Dim PosBeg
Dim i
Dim char
Dim PosEnd
Dim boundary
Dim boundaryPos
Dim Pos
Dim intCount
Dim Name
Dim PosFile
Dim PosBound
Dim Value
Dim FileName
Dim ContentType
Dim nome_file
Dim Conn
Dim filepathname
Dim ScriptObject
Dim MyFile
Dim Sql
Dim Rs



' //// Directory dove carico il file (la cartella ha i permessi in scrittura)
folder = "/public/immagini"


Response.Expires=0
Response.Buffer = TRUE
Response.Clear

Sub BuildUploadRequest(RequestBin)
PosBeg = 1
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
boundaryPos = InstrB(1,RequestBin,boundary)
Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
Dim UploadControl
Set UploadControl = CreateObject("Scripting.Dictionary")
'Get an object name
Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
Pos = InstrB(Pos,RequestBin,getByteString("name="))
PosBeg = Pos+6
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
PosBound = InstrB(PosEnd,RequestBin,boundary)
If PosFile<>0 AND (PosFile<PosBound) Then
PosBeg = PosFile + 10
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "FileName", FileName
Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
PosBeg = Pos+14
PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
UploadControl.Add "ContentType",ContentType
PosBeg = PosEnd+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
Else
Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
PosBeg = Pos+4
PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
End If
UploadControl.Add "Value" , Value
UploadRequest.Add name, UploadControl
BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
Loop
End Sub
Function getByteString(StringStr)
For i = 1 to Len(StringStr)
char = Mid(StringStr,i,1)
getByteString = getByteString & chrB(AscB(char))
Next
End Function
Function getString(StringBin)
getString =""
For intCount = 1 to LenB(StringBin)
getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
Next
End Function

byteCount = Request.TotalBytes

RequestBin = Request.BinaryRead(byteCount)
Dim UploadRequest
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin

' //// Fine Componente Upload

' //// riempio le variabili con valori proveninti dalla form
'progressivo = UploadRequest.Item("progressivo").Item("Value")
'data_inserimento = UploadRequest.Item("data_inserimento").Item("Value")
categoria = UploadRequest.Item("categoria").Item("Value")
serie = UploadRequest.Item("serie").Item("Value")
nome = UploadRequest.Item("nome").Item("Value")
cognome = UploadRequest.Item("cognome").Item("Value")
pronome = UploadRequest.Item("pronome").Item("Value")
protettore_protettrice = UploadRequest.Item("protettore_protettrice").Item("Value")
patrone_di = UploadRequest.Item("patrone_di").Item("Value")
........


' //// controllo che la form sia state regolarmente popolata
'If IsNull(categoria) OR categoria = "" OR IsNull(serie) OR serie = "" Then
'Response.Write ("<center><br><b>CAMPI OBBLIGATORI!</b><br><br><a href='javascript:history.back()'><b>RITORNA</b></a></center>")
'Response.End
'End if


'etas=Datediff("yyyy",data_inserimento)


Set conn = Server.CreateObject("ADODB.Connection")

conn.Open "Driver={MySQL ODBC 3.51 Driver};SERVER=;Database=Sql1_1;port=;UID=Sql;PWD=;"

' //// creo il file nella folder
if UploadRequest.Item("foto1").Item("FileName")="" then

Else

contentType = UploadRequest.Item("foto1").Item("ContentType")
filepathname = UploadRequest.Item("foto1").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
value = UploadRequest.Item("foto1").Item("Value")

Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

Set MyFile = ScriptObject.CreateTextFile(Server.mappath(folder)&"\"&filename)

For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next
MyFile.Close

End if

' //// seleziono la tabella dove scrivero l'ora, il titolo ed il nome del file
Sql = "Select * FROM santini"

Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open SQL, Conn, 1, 2

' //// aggiugo un nuovo record alla tabella
Rs.AddNew
Rs("data_inserimento") = data_inserimento
Rs("categoria") = categoria
Rs("serie") = serie
Rs("nome") = nome
Rs("cognome") = cognome
Rs("pronome") = pronome
Rs("protettore_protettrice") = protettore_protettrice
Rs("patrone_di") = patrone_di
Rs("reliqua") = reliqua
.......
Rs("foto1") = filename
Rs("foto2") = filename
Rs("foto3") = filename
Rs("foto4") = filename
Rs("note") = note


categoria=replace(categoria,"'","''")
serie=replace(serie,"'","''")
nome=replace(nome,"'","''")
cognome=replace(cognome,"'","''")
pronome=replace(pronome,"'","''")
protettore_protettrice=replace(protettore_protettrice,"'","''")
patrone_di=replace(patrone_di,"'","''")
reliqua=replace(reliqua,"'","''")
......
foto1=replace(foto1,"'","''")
foto2=replace(foto2,"'","''")
foto3=replace(foto3,"'","''")
foto4=replace(foto4,"'","''")
note=replace(note,"'","''")


'Rs("data_inserimento") = date()
Rs.UpDate

' //// chiudo il record set e libero le risorse
Rs.Close
Set Rs = Nothing


' //// chiudo la connessione e libero le risorse
Conn.Close
Set Conn = Nothing

' //// carico la pagina di risposta e stampo a video il link al file caricato
Response.Redirect("registrazione_effettuata.asp#ok")
%>


Se carico 1 immagine va bene, se ne carico di più nei campi del DB mi inserisce l'ultima che ho selezionato in tutti e 4 campi foto :(

Vi chiedo se potreste essere cosi gentili e pazienti nel darmi qualche dritta su come modificarlo (credo che sia possibile) al fine di poter caricare tutte e 4 foto.

Grazie mille!

Ciao, da una rapida occhiata ho notato che la variabile nome file è identica su tutti e 4 i campi, devi meglio valorizzare il "Request.Form".

Codice:
Rs("foto1") = filename
Rs("foto2") = filename
Rs("foto3") = filename
Rs("foto4") = filename
 
Stato
Chiusa ad ulteriori risposte.

Discussioni simili