Questo è un form per inserire un file (per esempio un'immagine) e un campo di testo:
codice:
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}
//-->
</script>
<form name="formfile" method="post">
<div align="center">Carica file sul sito
<input type="button" name="link" value="Seleziona documento" onclick="javascript: MM_openBrWindow('upload/uploadform.asp','','width=500,height=300,top=120,left=120');"/></div>
</form>
<form name="notizie" method="post" action="notizie.asp">
<div align="center">Titolo
<input type="text" name="titolo" /></div>
<div align="center"><input type="submit" name="submit" value="Invia" /><input type="reset" name="reset" value="Annulla" /></div>
</form>
Il pulsante "Seleziona documento" apre quest'altro form (uploadform.asp nella cartella upload):
codice:
<form method="post" enctype="multipart/form-data" action="upload.asp">
<p align="center">File:
<input type="file" name="link" size=30>
<input type="submit" name="Enter" value="Conferma"></p>
</form>
La pagina ASP che effettua l'upload del documento (o immagine) sul server (upload.asp) è:
codice:
<%
Server.ScriptTimeout = 200
'variabili di configurazione
Dim folder
folder = "/immagini" 'directory sul server con accesso in scrittura
'fine variabili di configurazione
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
contentType = UploadRequest.Item("link").Item("ContentType")
filepathname = UploadRequest.Item("link").Item("FileName")
filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
session("link") = filename
value = UploadRequest.Item("link").Item("Value")
'Create FileSytemObject Component
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
'Create and Write to a File
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
%>
<html>
<head>
<title>UPLOAD FILE</title>
<script language="JavaScript">
function close_reload() {
window.opener.location.reload();
window.close();
}
</script>
</head>
<body>
<center><div>File caricato</div>
</p>
<div>Chiudi finestra</div></center>
</body>
</html>
Con questa procedura, prima scegli il file da caricare sul server e ne fai l'upload, poi inserisci i campi nel form "normale" per la relativa elaborazione (che, in questo caso, viene eseguita dalla pagina notizie.asp, come puoi vedere dall'action del primo form). L'elaborazione può consistere nell'inserimento dei dati in un database, nella loro presentazione a video, ecc..........il nome del file caricato lo puoi inserire nel database sia scrivendolo a mano nell'altro form, sia (meglio) recuperandolo dal form di upload (per esempio con una variabile di sessione).
I files (o immagini) da caricare possono benissimo essere due, puoi ottenere questo raddoppiando il "formfile" (formfile1 e formfile2) e, dopo i due upload, compilare e inoltrare il form con i campi di testo (nell'esempio: il form notizie).
Spero che queste indicazioni ti possano essere di aiuto...........