Uploader en asp sans composant.
- Par: serveurblog
- Le: 09.04.2008 15:50:05
- Dans: Composants ASP
- Commentaires: 0
Upload de fichiers sur serveur sans besoin de composant serveur.
Code ...
'**********************************************'
'*****Upload sans composant ASP, by Oz, Paris*******'
'**********************************************'
'********** Fonctions secondaires *************
'+--------------------------------------{ Méthode : recherchePosition }-----+
'! !
'! recherchePosition(position_debut,chaine,chaine_recherchee) !
'! !
'! role : retourne la position de "chaine_recherchee" dans !
'! "chaine". La recherche debute à "position_debut". !
'! Valeur retournee : position ou "0" si la chaine n est pas trouvée. !
'+--------------------------------------------------------------------------+
function recherchePosition(position_debut,chaine,chaine_recherchee)
PosDebutFic = Instrb(position_debut, chaine, chaine_recherchee)
' -------------------
' On lui ajoute ensuite la longueur du terme filename=" ce qui nous permet d'avoir la position de début du nom du fichier (PosDebutFic)
'recherchePosition = PosDebutFic+Lenb(chaine_recherchee)
recherchePosition =PosDebutFic
end function
'+-----------------------------------------{ Méthode : asciiTObinaire }-----+
'! !
'! asciiTObinaire(chaine) !
'! !
'! role : Transforme une chaine binaire en chaine ASCII. !
'! !
'! Parametres : chaineBinaire = chaine binaire à transformer. !
'! !
'! Valeur retournee : chaine ASCII !
'! !
'+--------------------------------------------------------------------------+
function asciiTObinaire(chaine)
For I=1 to len(chaine)
B = B & ChrB(Asc(Mid(chaine,I,1)))
Next
asciiTObinaire = B
End Function
'+-----------------------------------------{ Méthode : binaireTOascii }-----+
'! !
'! binaireTOascii(chaineBinaire) !
'! !
'! role : Transforme une chaine binaire en chaine ASCII. !
'! !
'! Parametres : chaineBinaire = chaine binaire à transformer. !
'! !
'! Valeur retournee : chaine ASCII !
'! !
'+--------------------------------------------------------------------------+
function binaireTOascii(chaineBinaire)
ContenuAscii = ""
for Z = 1 to LenB(chaineBinaire)
ContenuAscii = ContenuAscii & chr(ASCB(MidB(chaineBinaire, Z, 1)))
next
binaireTOascii = ContenuAscii
end function
'+-----------------------------------------{ Méthode : traitefilename}-----+
'! role: traitement du nom du fichier à uploader (blancs, espaces, accents,...)
'+--------------------------------------------------------------------------+
function traitefilename(filename)
filename=replace(filename," ","")
filename=replace(filename,"é","e")
filename=replace(filename,"è","e")
filename=replace(filename,"à","a")
filename=replace(filename,"ü","u")
filename=replace(filename,"ç","c")
filename=replace(filename,"ê","e")
traitefilename=filename
end function
'*********** FIN des Fonctions secondaires******************'
'********************************
'***** FONCTION PRINCIPALE*******
'********************************
'********************************
' a appeler par votre script ASP pour le traitement de l'upload.
'-->arguments :
' chainebinaire = Request.BinaryRead(Request.TotalBytes) : Content-Type issue de l'upload
' number = nombre de champs d'upload dans le formulaire ( peut etre amélioré)
' extensionsUploadees: chaine contenant les extensions permises pour l'upload ( séparées par un espace) !!
function LancementUpload (chainebinaire, number,extensionsUploadees)
'chainebinaire = Request.BinaryRead(Request.TotalBytes)
'Grâce à la méthode BinaryRead on lit la totalité du post en mode binaire que l'on place dans une variable Contenu
'La propriété TotalBytes nous Indique le nombre total des octets envoyés par le client dans le corps du message de requête.
'-------------------
'response.write("content="&binaireTOascii(chainebinaire))
'response.redirect("test.asp?text="&binaireTOascii(chainebinaire))
Server.ScriptTimeOut=600
index=60 ' variable interne qui va nous permettre de nous "balader" dans le Content-Type.
stringgeneral=""
'on commence la boucle d'upload
for j=1 to number
'initialisation des 3 variables principales utilisées
NomFichier=""
nameform=""
DataFichier=""
'init de la variable de controle des extensions
ctrlext=0
'A / Recherche du nom du fichier uploadé
'---------------------------------'
PosDebutFilename = recherchePosition(index,chainebinaire,asciiTObinaire("filename=" & chr(34)))+10
'response.redirect("test.asp?text="&PosDebutFilename)
if PosDebutFilename <> 0 then
PosDebutContentType = recherchePosition(index,chainebinaire,asciiTObinaire("Content-Type:"))
' On trouve la position de la fin du nom du fichier à partir de la position
' du début du terme Content-Type: à laquelle on retire trois octets
' (un espace, une " et la première lettre du terme)
PosFinFilename = PosDebutContentType - 3
if PosFinFilename > PosDebutFilename then
NomFichier = binaireTOascii(midb(chainebinaire,PosDebutFilename,(PosFinFilename-PosDebutFilename)))
end if
Position = InstrRev(NomFichier, "\")
NomFichierCourt = right(NomFichier, (Len(NomFichier) - Position)) 'nom du fichier SANS le chemin d'acces.
NomFichierCourt=traitefilename(NomFichierCourt)
'response.redirect("test.asp?text="&NomFichierCourt)
'si un fichier uploadé dans ce champ ...
If (trim(NomFichierCourt))<>"" then
'on trouve l extension du fichier et on la compare aux extensionsUploadees
tab=split(NomFichierCourt,".")
ext = tab(ubound(tab))
'si extensionsUploadees a ete remplie...
'temp=""
if(extensionsUploadees<>"") then
tab2=split(extensionsUploadees," ")
for each exti in tab2
'temp=temp&" "&exti
if(exti=ext) then ctrlext=1 end if
next
'response.redirect("test.asp?text="&ctrlext)
else 'sinon, on met ctrlext automatiquement a 1
ctrlext=1
end if
end if
end if
'on ne va plus loin que si le ctrlext est OK et si un fichier est present pour etre uploadé...
if(ctrlext=1) then
'B / Recherche du nom du champ du formulaire correspondant'
'on a besoin de cette valeur pour mettre les valeurs dans la base de données
PosDebutName = recherchePosition(index,chainebinaire,asciiTObinaire("name="&chr(34))) + 6
'response.redirect("test.asp?text="&PosDebutName)
if(PosDebutName<>0) then
PosDebutFilename= recherchePosition(index,chainebinaire,asciiTObinaire("filename="&chr(34)))
'response.redirect("test.asp?text="&PosDebutFilename)
' on trouve la position de la fin du nom du champ a partir de la position
'du debut du terme "filename=", a laquelle on retire 4 octets :
' ( la premiere lettre de "filename=" + un espace + un ; + un " = 4)
PosFinName = PosDebutFilename-3 ' 3, car ca marche mieux avec ca !!!!
if(PosFinName > PosDebutName) then
nameform=binaireTOascii(midb(chainebinaire,PosDebutName,(PosFinName-PosDebutName)))
'response.write("nomformulaire="&nameform&"<br>")
end if
'response.redirect("test.asp?text="&nameform)
end if
'C / Recherche du contenu du fichier
'On cherche la position de début du contenu du fichier en sautant les blancs
oz = recherchePosition(index,chainebinaire,asciiTObinaire("Content-Type:"))+14 'fin du mot "Content-Type"
'PosFinContentType = Instrb(PosDebutContentType, chainebinaire, asciiTObinaire(chr(13))) 'fin du mot "Content-Type"
'debut du contenu du fichier
PosDebutContenu = recherchePosition(oz,chainebinaire,asciiTObinaire(chr(13)))+4
'PosDebutContenu=oz
'response.write("PosDebutContenu="&PosDebutContenu&"<br>")
'fin du contenu du fichier
PosFinContenu=recherchePosition(PosDebutContenu, chainebinaire, asciiTObinaire("----------"))
'response.write("PosFinContenu="&PosFinContenu&"<br>")
'content_type = binaireTOascii(midb(chainebinaire, PosDebutContentType, PosFinContentType-PosDebutContentType))
'DataFichier = midb(chainebinaire, PosDebutContenu, lenb(chainebinaire))
'DataFichier =midb(chainebinaire, PosDebutContenu, PosFinContenu-PosDebutContenu)
'content_type = binaireTOascii(midb(chainebinaire, PosDebutContenu, PosFinContenu-PosDebutContenu))
'DataFichier =midb(chainebinaire, PosDebutContenu, lenb(content_type))
DataFichier =midb(chainebinaire, PosDebutContenu, PosFinContenu-PosDebutContenu)
'response.write("data="&binaireTOascii(DataFichier))
'D/ Ecriture des données sur le serveur
'-------------------
stringgeneral=stringgeneral & nameform&","&NomFichierCourt&";" 'une chaine globale pour l'ecriture de données dans la base de données
'response.write(NomFichierCourt&"<br>")
NouveauFic = Server.MapPath("/upload/" & NomFichierCourt)
Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
Set Out=FileObject.CreateTextFile(NouveauFic, True)
For I = 1 to LenB(DataFichier)
Out.Write chr(AscB(MidB(DataFichier,I,1)))
'response.write("I="&I&"<br>")
Next
Out.close
Set Out=nothing
end if 'fin if(ctrlext=1)
'on met a jour l'index pour la recherche d'apres.
index=PosDebutContentType+20
'stringindex=stringindex&" "&index
next 'fin for j=1 to number
LancementUpload=stringgeneral
'response.redirect("test.asp?text="&stringgeneral)
end function
Pas de commentaire