FAQ
F.A.Q.
Domande - Risposte
Upload di file con ASP senza DLL
Internet Provider
Software
Internet Provider
mail marketing
preventivi Internet
supporto tecnico
sms da web
download
corsi
lavoro
pagamenti
Internet Provider
 
FAQ
faq
news
Applicativi asp
Motomania

Upload di file con ASP senza DLL

Un problema molto comune tra i programmatori Asp è la possibilità di effettuare l'upload (trasferimento di file dal client al server) attraverso uno script asp senza utilizzare DLL da registrare.

Di script che utilizzano DLL ce ne sono a centinaia ma questi sono o a pagamento e in ogni caso necessitano di un intervento dell'amministratore del server che spesso ci risponderà con un secco NO perchè l'installazione di DLL non è fattibile per "motivi di sicurezza".

Raggiriamo questo problema, con questo script.

I possibili utilizzi
Pur essendo abbastanza limitato, questo script ci permette di effettuare l'upload di un singolo file su una cartella predefinita. E' molto utile se si vuole mettere a disposizione dei propri utenti un sistema per inserire propri file, oppure per realizzare delle directory di file o di foto o di altro ancora...

L'unica particolarità di questo modulo (form) è come passare i dati inseriti (enctype="multipart/form-data").

Il file upload.asp

<%@ Language= VBScript %>
<%
' Imposta il tempo max di esecuzione dello script (espresso in millisecondi)
Server.ScriptTimeout = 100000


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

'impostazioni variabili
byteCount = Request.TotalBytes
RequestBin = Request.BinaryRead(byteCount)
Set UploadRequest = CreateObject("Scripting.Dictionary")
BuildUploadRequest RequestBin

'individua il tipo di file che si cerca di fare l upload
contentType = UploadRequest.Item("file").Item("ContentType")

'intero percorso del file
filepathname = UploadRequest.Item("file").Item("FileName")

'****************************** CONTROLLI IMMAGINE

'controllo tipo immagine
tipo = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"."))

'cambiare la scrita zip e gz qui sotto per inserire la sigla di un altro tipo di file
'Se si vuole permettere l'upload di qualsiasi tipo di file cancellare o commentare
'le successive 4 linee di codice e l'ultimo END IF della pagina upload.asp
If tipo <> "zip" AND tipo <> "gz" then
Response.Write ("Errore Upload. Non è possibile fare upload di un file ." & tipo)
Response.End
else

' calcolo del peso della immagine
'imposta qui, il peso max. 9000 vuol dire 9 Kb circa
IF byteCount > 9000 THEN 
Response.Write ("Errore Upload. File troppo grande!")
Response.End
else

'*********************************** NOME FINALE DEL FILE e UPLOAD
nomefile = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))

'in questa variabile viene salvato il nome del file che sarà del tipo 2311235.gif
filename = nomefile

value = UploadRequest.Item("file").Item("Value")
Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
pathEnd = Len(Server.mappath(Request.ServerVariables("PATH_INFO")))-14

'da questa riga di codice si specifica l'indirizzo relativo dove sarà inserito il file
Set MyFile = ScriptObject.CreateTextFile(Server.mappath("../file") & filename)
For i = 1 to LenB(value)
MyFile.Write chr(AscB(MidB(value,i,1)))
Next

MyFile.Close

End If
End If
%>


Questo script in poche parole effettua un controllo sul tipo e il peso del file di cui si vuole fare l'upload. Questo script va inserito tra gli HEAD della nostra pagina web, altrimenti non funzionerà. Questo codice inoltre preleva il nome del file (senza url) e lo memorizza dentro la cartella impostata.
Per funziona, questo script necessita anche della seguente riga di codice da inserire tra i tag BODY:

<!--#include file="esegui.asp"-->

La pagina esegui.asp

Questa pagina contiene codice che NON DEVE essere modificato. Basta copiarlo e incollarlo così come è.

<%
' !!! NON MODIFICARE QUESTO FILE !!!

'********************** NON MODIFICARE
'è il cuore dello script
'senza questo file non viene effettuato l upload
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")
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 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
%>

Fonte: webmasterpoint.org
a cura di Lorenzo Pascucci


faq Indietro

 

Home | Chi Siamo | Contatti | Internet Provider | Software House | Active Web | Web Marketing | SMS | Realizzazioni | Preventivi | Supporto | Lavoro | Condizioni
RD Informatica - Str. Rupola 14 - 61122 Pesaro PU - Tel 0721 206238 Fax 0721 1835042 P.Iva 01241970415 - info@rdinformatica.com 
Estrattore Pagine Gialle
Applicativi asp
RD
Applicativi asp
Internet provider
Software House
Applicativi asp
SMS Web
Software SMS
Mailing Project