Uploader en asp sans composant.

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





Commentaires

Pas de commentaire

Laissez un commentaire

Commenting is restricted to registered users only. Please register or login now to submit a comment.