begin process at 2012 02 05 01:19:30
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers/Disque

 > UPLOADER UN FICHIER SANS COMPOSANT ! {NOUVELLE METHODE}

UPLOADER UN FICHIER SANS COMPOSANT ! {NOUVELLE METHODE}


 Information sur la source

Note :
8,83 / 10 - par 52 personnes
8,83 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers/Disque Classé sous :upload, fichier, multiple, class Niveau :Initié Date de création :21/04/2001 Date de mise à jour :10/12/2005 10:34:39 Vu / téléchargé :38 705 / 33 678

Auteur : Nix

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note


 Description

Et oui, c'est possible !
Bon, pour éviter tout mal entendu, j'ai enlevé la méthode précédente car j'utilisais une fonction qui provenait semble-t-il de ASPToday.
Stéphane Dorlac (Webmaster de Gasp) travaillant chez Wrox m'a demandé de retirer la source et pour éviter tout malentendu, je l'ai retirée et remplacée par une source que j'ai développé et qui n'a rien à voir avec la précédente)
Voici une méthode made by Nix De A à Z !
Je l'ai faite sous forme d'une Class car c'est plus simple à utiliser comme ça.
Il a quelques options, j'ai essayé de commenter un maximum.
Essayez le, vous verrez, c'est pas sorcié à utiliser
Je pense rajouter des options, si vous avez de bonnes idées, je suis preneur :)

(UNE NOUVELLE VERSION PERMETANT DE RECUPERER DES CHAMPS TEXTE EN MEME TEMPS EST DISPO ICI http://www.aspfr.com/code.aspx?ID=8673 )

Source

  • <!----------- Fichier uploadfichier.asp --------->
  • <!--#include file="clsUplFich.asp"-->
  • <%
  • ' *****************************************************************************
  • ' Réalisé par Nicolas SOREL ( Nix pour les intimes :) )
  • ' Pour le site ASPFr.com
  • ' Retrouvez d'autres scripts ASP sur www.ASPFr.com
  • ' Vous avez le droit d'utiliser ce script dans vos pages mais si vous souhaitez
  • ' l'exposer sur un autre site de programmation merci de me contacter
  • ' (nix@codes-sources.com)
  • ' *****************************************************************************
  • %>
  • <html>
  • <head>
  • <title>Envoyer des fichiers</title>
  • </head>
  • <body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#0000FF" alink="#FF0000">
  • <font face="Verdana" size="2" color="#000000">
  • <%
  • Select Case Request.Querystring("Etape")
  • Case ""
  • %>
  • <div align="center">
  • <form action="uploadfichier.asp?Etape=1" method="post" enctype="multipart/form-data">
  • <br><br>
  • Sélectionnez le(s) fichier(s) que vous souhaitez uploader.<br><br>
  • <input type="file" name="Fichier1" accept="image/jpeg"><br>
  • <input type="file" name="Fichier2" accept="image/jpeg"><br>
  • <input type="file" name="Fichier3" accept="image/jpeg"><br>
  • <input type="submit" value="Envoyer !">
  • </form>
  • </div>
  • <%
  • Case "1"
  • Dim MonUpload
  • Dim i
  • Set MonUpload = New UplFichier
  • ' .NbFichiers Retourne le nombre de fichiers Uploadé
  • For i = 1 To MonUpload.NbFichiers
  • Response.Write "<b>Fichier N° " & i & "</b><br>"
  • ' NomFichier(ID) Retourne le nom du fichier uploadé
  • Response.Write "Nom du fichier : <b>" & MonUpload.NomFichier(i) & "</b><br>"
  • ' TailleFichier(ID) Retourne la taille du fichier uploadé
  • Response.Write "Taille : <b>" & MonUpload.TailleFichier(i) & "</b> octets<br>"
  • ' ExtensionFichier(ID) Retourne l'extension du fichier uploadé
  • Response.Write "Extension : <b>" & MonUpload.ExtensionFichier(i) & "</b><br>"
  • ' TypeFichier(ID) Retourne le type mime du fichier uploadé
  • Response.Write "Type mime : <b>" & MonUpload.TypeFichier(i) & "</b><br>"
  • ' NomForm(ID) Retourne le nom du champ dans lequel était le fichier uploadé
  • Response.Write "Nom de l'Input : <b>" & MonUpload.NomForm(i) & "</b><br>"
  • ' CheminFichierDistant(ID) Retourne le chemin distant sur lequel le fichier uploadé se trouvait
  • Response.Write "Chemin distant : <b>" & MonUpload.CheminFichierDistant(i) & "</b><br><br>"
  • ' .NouveauNom Optionnel , si vous souahitez forcer le nom du fichier en local
  • ' Par défaut, le nom du fichier Uploadé sera utilisé
  • ' Exemple :
  • ' MonUpload.NouveauNom = "NouveauNomDuFichier.txt"
  • ' SauveFichier(ID) sauvegarde le fichier Uploadé
  • MonUpload.SauveFichier(i)
  • ' ID représente le N° du fichier uploadé.
  • ' Si vous n'avez qu'un champ pour uploader, alors le ID sera 1
  • ' Dans cet Exemple, il y a plusieurs fichiers uploadé donc, je l'ai
  • ' mis dans une boucle pour vous montrer comment faire
  • Next
  • Set MonUpload = Nothing
  • End Select
  • %>
  • </font>
  • </body>
  • </html>
  • <!----------- Fin Fichier uploadfichier.asp --------->
  • <!----------- Fichier clsUplFich.asp --------->
  • <%
  • Option Explicit
  • ' *****************************************************************************
  • ' Cette Class a été réalisé par Nicolas SOREL ( Nix pour les intimes :) )
  • ' Pour le site ASPFr.com
  • ' Retrouvez d'autres scripts ASP sur www.ASPFr.com
  • ' Vous avez le droit d'utiliser ce script dans vos pages mais si vous souhaitez
  • ' l'exposer sur un autre site de programmation merci de me contacter
  • ' (nix@codes-sources.com)
  • ' *****************************************************************************
  • Class UplFichier
  • Private ToutEnvoi
  • Private VarFichierBin
  • Private VarTailleFichier
  • Private VarTailleBinFichier
  • Private NomDesFichier()
  • Private TailleDesFichier()
  • Private NbDeFichiers
  • Private LesFichiers()
  • Private NomDesForm()
  • Private CheminLocal
  • Private CheminDistant()
  • Private LocalNomFichier
  • Private Property Let AjoutNomFichier(LeNom)
  • Redim Preserve NomDesFichier(Ubound(NomDesFichier) + 1)
  • NomDesFichier(Ubound(NomDesFichier)) = LeNom
  • End Property
  • Private Property Let AjoutTailleFichier(LaTaille)
  • Redim Preserve TailleDesFichier(Ubound(TailleDesFichier) + 1)
  • TailleDesFichier(Ubound(TailleDesFichier)) = LaTaille
  • End Property
  • Private Property Let AjoutCheminDistant(LeCheminDistant)
  • Redim Preserve CheminDistant(Ubound(CheminDistant) + 1)
  • CheminDistant(Ubound(CheminDistant)) = LeCheminDistant
  • End Property
  • Private Property Let AjoutFichier(LeFichier)
  • Redim Preserve LesFichiers(Ubound(LesFichiers) + 1)
  • LesFichiers(Ubound(LesFichiers)) = LeFichier
  • End Property
  • Private Property Let AjoutNomForm(LeNomForm)
  • Redim Preserve NomDesForm(Ubound(NomDesForm) + 1)
  • NomDesForm(Ubound(NomDesForm)) = LeNomForm
  • End Property
  • Public Property Let Dossier(LeDossier)
  • CheminLocal = LeDossier
  • End Property
  • Public Property Let NouveauNom(NouvNomFichier)
  • LocalNomFichier = NouvNomFichier
  • End Property
  • Public Function SauveFichier(Lequel)
  • On Error Resume Next
  • Dim fso, fs
  • If LocalNomFichier = "" Then
  • LocalNomFichier = NomDesFichier(Lequel)
  • End If
  • Set fso = CreateObject("Scripting.FileSystemObject")
  • Set fs = fso.OpenTextFile(CheminLocal & LocalNomFichier, 2, True)
  • If Err.Number <> 0 Then Response.Write "Erreur lors de l'écriture du fichier : " & CheminLocal & NomDesFichier(Lequel) & vbCrLf & Err.Description & "<br>":LocalNomFichier = "":Exit Function
  • fs.Write LesFichiers(LeQuel)
  • If Err.Number <> 0 Then Response.Write "Erreur lors de l'écriture du fichier : " & CheminLocal & NomDesFichier(Lequel) & vbCrLf & Err.Description & "<br>":LocalNomFichier = "":Exit Function
  • Set fs = Nothing
  • Set fso = Nothing
  • LocalNomFichier = ""
  • End Function
  • Public Property Get NomFichier(Lequel)
  • NomFichier = NomDesFichier(Lequel)
  • End Property
  • Public Property Get CheminFichierDistant(Lequel)
  • CheminFichierDistant = CheminDistant(Lequel)
  • End Property
  • Public Property Get TailleFichier(Lequel)
  • TailleFichier = TailleDesFichier(Lequel)
  • End Property
  • Public Property Get NomForm(Lequel)
  • NomForm = NomDesForm(Lequel)
  • End Property
  • Public Property Get NbFichiers()
  • NbFichiers = NbDeFichiers
  • End Property
  • Private Property Get HttpContentType()
  • HttpContentType = Request.ServerVariables ("HTTP_CONTENT_TYPE")
  • End Property
  • Public Property Get TypeFichier(Lequel)
  • TypeFichier = TypeDeFichier(NomDesFichier(Lequel))
  • End Property
  • Public Property Get ExtensionFichier(Lequel)
  • ExtensionFichier = Right(NomDesFichier(Lequel), Len(NomDesFichier(Lequel)) - InStrRev(NomDesFichier(Lequel),"."))
  • End Property
  • Private Function Preliminaires()
  • VarFichierBin = Request.BinaryRead(Request.TotalBytes)
  • VarTailleBinFichier = LenB(VarFichierBin)
  • End Function
  • Private Sub Class_Initialize()
  • ReDim NomDesFichier(0)
  • ReDim LesFichiers(0)
  • ReDim TailleDesFichier(0)
  • Redim NomDesForm(0)
  • ReDim CheminDistant(0)
  • CheminLocal = Server.MapPath(".\") & "\" ' Dossier d'upload par defaut
  • LocalNomFichier = "" ' Nom du fichier si l'on souhaite forcer un autre nom que le fichier envoyé
  • Call Preliminaires
  • Call LetsGOOOO
  • End Sub
  • Private Sub Class_Terminate()
  • Set NomDesFichier = Nothing
  • Set LesFichiers = Nothing
  • Set TailleDesFichier = Nothing
  • End Sub
  • Private Function Upl2ADO()
  • On Error Resume Next
  • Upl2ADO = False
  • Dim MonObjRs
  • Set MonObjRs = CreateObject("ADODB.Recordset")
  • MonObjRs.Fields.Append "TmpBin", 201, VarTailleBinFichier
  • MonObjRs.Open
  • MonObjRs.AddNew
  • MonObjRs("TmpBin").AppendChunk VarFichierBin
  • MonObjRs.Update
  • ToutEnvoi = MonObjRs("TmpBin")
  • MonObjRs.Close
  • Set MonObjRs = Nothing
  • If Err.Number <> 0 Then Response.Write "Erreur lors de l'upload du/des fichier(s) : " & vbCrLf & Err.Description & "<br>" : Exit Function
  • Upl2ADO = True
  • End Function
  • Public Function LetsGOOOO()
  • Dim LesLimites, LimitePosition
  • Dim CompteFichier
  • Dim DernierFichierDebut, DernierFichierFin, FichierEnCours
  • Dim DebutNomFichier, FinNomFichier, NomDuFichier, DernierFichier
  • Dim DebutFichier, FinFichier, DonneesDuFichier
  • Dim LeContentType, TailleDuFichier, NomInput
  • If Not VarTailleBinFichier > 0 Then
  • Response.Write "Aucun fichier n'a été sélectionné"
  • Exit Function
  • End If
  • If Upl2ADO = True Then
  • ' On Récupère l'entête HTTP
  • LesLimites = HttpContentType
  • ' On met notre compteur de Fichier à 0
  • CompteFichier = 0
  • ' On cherche les limites (les Boundaries)
  • LimitePosition = InStr(1, LesLimites, "boundary=") + 8
  • LesLimites = "--" & Right(LesLimites, Len(LesLimites) - LimitePosition)
  • ' ********************************************
  • ' ** Les choses sérieuses commencent ici :) **
  • ' ********************************************
  • ' On cherche le 1er fichier
  • DernierFichierDebut = InStr(1, ToutEnvoi, LesLimites)
  • DernierFichierFin = InStr(InStr(1, ToutEnvoi ,LesLimites) + 1 , ToutEnvoi , LesLimites) - 1
  • DernierFichier = False
  • Do While DernierFichier = False
  • FichierEnCours = Mid(ToutEnvoi, DernierFichierDebut, DernierFichierFin - DernierFichierDebut)
  • DebutNomFichier = InStr(1, FichierEnCours, "filename=") + 10
  • FinNomFichier = InStr(DebutNomFichier, FichierEnCours, Chr(34))
  • ' On vérifie que le champ du fichier n'est pas vide
  • If DebutNomFichier <> FinNomFichier Then
  • CompteFichier = CompteFichier + 1
  • ' On récupère le(s) nom(s) du/des champ(s) Input du formulaire
  • NomInput = InStr(1, FichierEnCours, "name=""")
  • If NomInput > 0 Then
  • NomInput = Mid(FichierEnCours, NomInput + 6, InStr(NomInput + 6, FichierEnCours, """") - NomInput - 6)
  • End If
  • AjoutNomForm = NomInput
  • 'Response.Write NomInput & "<br>"
  • ' On récupère le chemin du fichier (distant) puis on extrait juste le non du fichier
  • NomDuFichier = InStr(1, FichierEnCours, "filename=""")
  • If NomDuFichier > 0 Then
  • NomDuFichier = Mid(FichierEnCours, NomDuFichier + 10, InStr(NomDuFichier + 10, FichierEnCours, """") - NomDuFichier - 10)
  • End If
  • 'Response.Write NomDuFichier
  • AjoutCheminDistant = NomDuFichier
  • NomDuFichier = Right(NomDuFichier, Len(NomDuFichier) - InStrRev(NomDuFichier,"\"))
  • ' On repère le début du fichier qui se trouve après le Content-Tpye
  • LeContentType = InStr(1, FichierEnCours, "Content-Type:")
  • If LeContentType > 0 Then
  • DebutFichier = InStr(LeContentType, FichierEnCours, vbCrLf) + 4
  • End If
  • FinFichier = Len(FichierEnCours)
  • ' Calcul de la taille du fichier
  • TailleDuFichier = FinFichier - DebutFichier
  • ' Recup. du fichier
  • DonneesDuFichier = Mid(FichierEnCours, DebutFichier, TailleDuFichier)
  • AjoutFichier = DonneesDuFichier
  • AjoutNomFichier = NomDuFichier
  • AjoutTailleFichier = Len(DonneesDuFichier) 'LaTaille
  • End If
  • ' On va au fichier suivant
  • ' On repère le début et la fin du fichier suivant
  • DernierFichierDebut = InStr(DernierFichierFin + 1, ToutEnvoi, LesLimites)
  • DernierFichierFin = InStr(DernierFichierDebut + 1 , ToutEnvoi, LesLimites) - 1
  • If Not DernierFichierFin > 0 Then DernierFichier = True
  • Loop
  • NbDeFichiers = CompteFichier
  • ' ************************
  • ' ** La Fin du bazar :) **
  • ' ************************
  • Else
  • Response.Write "Il y a eu une erreur lors de l'upload"
  • End If
  • End Function
  • Private Function TypeDeFichier(LeFichier)
  • Dim TmpExt
  • TmpExt = Right(LeFichier, Len(LeFichier) - InStrRev(LeFichier,"."))
  • Select Case LCase(TmpExt)
  • Case "jpg", "jpeg"
  • TypeDeFichier = "image/jpeg"
  • Case "gif"
  • TypeDeFichier = "image/gif"
  • Case "png"
  • TypeDeFichier = "image/png"
  • Case "txt"
  • TypeDeFichier = "text/plain"
  • Case "asp"
  • TypeDeFichier = "text/asp"
  • Case "html", "htm"
  • TypeDeFichier = "text/html"
  • Case "xml"
  • TypeDeFichier = "text/xml"
  • Case "doc"
  • TypeDeFichier = "application/msword"
  • Case "doc"
  • TypeDeFichier = "application/vnd.ms-excel"
  • Case "pdf"
  • TypeDeFichier = "application/pdf"
  • Case "exe"
  • TypeDeFichier = "application/x-msdownload"
  • Case "zip"
  • TypeDeFichier = "application/x-compressed"
  • Case "rar"
  • TypeDeFichier = "application/x-rar-compressed"
  • Case "mp3", "mp2"
  • TypeDeFichier = "audio/mpeg"
  • Case "au"
  • TypeDeFichier = "audio/basic"
  • Case "wav"
  • TypeDeFichier = "audio/x-wav"
  • Case "mpg", "mpeg"
  • TypeDeFichier = "video/mpeg"
  • Case "avi"
  • TypeDeFichier = "video/avi"
  • ' Liste non exhaustive, vous pouvez en rajouter autant que vous voulez
  • Case Else
  • TypeDeFichier = "application/unknown"
  • End Select
  • End Function
  • End Class
  • %>
  • <!----------- Fin Fichier clsUplFich.asp --------->
<!----------- Fichier uploadfichier.asp --------->
<!--#include file="clsUplFich.asp"-->
<%
' *****************************************************************************
' Réalisé par Nicolas SOREL ( Nix pour les intimes :) )
' Pour le site ASPFr.com
' Retrouvez d'autres scripts ASP sur www.ASPFr.com
' Vous avez le droit d'utiliser ce script dans vos pages mais si vous souhaitez
' l'exposer sur un autre site de programmation merci de me contacter
' (nix@codes-sources.com)
' *****************************************************************************
%>
<html>
<head>
    <title>Envoyer des fichiers</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#0000FF" alink="#FF0000">
<font face="Verdana" size="2" color="#000000">
<%
	Select Case Request.Querystring("Etape")
		Case ""
%>
<div align="center">
<form action="uploadfichier.asp?Etape=1" method="post" enctype="multipart/form-data">
    <br><br>
    Sélectionnez le(s) fichier(s) que vous souhaitez uploader.<br><br>
    <input type="file" name="Fichier1" accept="image/jpeg"><br>
    <input type="file" name="Fichier2" accept="image/jpeg"><br>
    <input type="file" name="Fichier3" accept="image/jpeg"><br>
    <input type="submit" value="Envoyer !">
</form>

</div>
<%
		Case "1"
			Dim MonUpload
			Dim i

			Set MonUpload = New UplFichier

			' .NbFichiers Retourne le nombre de fichiers Uploadé
			For i = 1 To MonUpload.NbFichiers
				Response.Write "<b>Fichier N° " & i & "</b><br>"
				' NomFichier(ID) Retourne le nom du fichier uploadé
				Response.Write "Nom du fichier : <b>" & MonUpload.NomFichier(i) & "</b><br>"
				' TailleFichier(ID) Retourne la taille du fichier uploadé
				Response.Write "Taille : <b>" & MonUpload.TailleFichier(i) & "</b> octets<br>"
				' ExtensionFichier(ID) Retourne l'extension du fichier uploadé
				Response.Write "Extension : <b>" & MonUpload.ExtensionFichier(i) & "</b><br>"
				' TypeFichier(ID) Retourne le type mime du fichier uploadé
				Response.Write "Type mime : <b>" & MonUpload.TypeFichier(i) & "</b><br>"
				' NomForm(ID) Retourne le nom du champ dans lequel était le fichier uploadé
				Response.Write "Nom de l'Input : <b>" & MonUpload.NomForm(i) & "</b><br>"
				' CheminFichierDistant(ID) Retourne le chemin distant sur lequel le fichier uploadé se trouvait
				Response.Write "Chemin distant : <b>" & MonUpload.CheminFichierDistant(i) & "</b><br><br>"

				' .NouveauNom Optionnel , si vous souahitez forcer le nom du fichier en local
				' Par défaut, le nom du fichier Uploadé sera utilisé
				' Exemple :
				' MonUpload.NouveauNom = "NouveauNomDuFichier.txt"

				' SauveFichier(ID) sauvegarde le fichier Uploadé
				MonUpload.SauveFichier(i)

				' ID représente le N° du fichier uploadé.
				' Si vous n'avez qu'un champ pour uploader, alors le ID sera 1
				' Dans cet Exemple, il y a plusieurs fichiers uploadé donc, je l'ai 
				' mis dans une boucle pour vous montrer comment faire
			Next
			Set MonUpload = Nothing
	End Select
	%>	
</font>
</body>
</html>
<!----------- Fin Fichier uploadfichier.asp --------->

<!----------- Fichier clsUplFich.asp --------->
<%
Option Explicit

' *****************************************************************************
' Cette Class a été réalisé par Nicolas SOREL ( Nix pour les intimes :) )
' Pour le site ASPFr.com
' Retrouvez d'autres scripts ASP sur www.ASPFr.com
' Vous avez le droit d'utiliser ce script dans vos pages mais si vous souhaitez
' l'exposer sur un autre site de programmation merci de me contacter
' (nix@codes-sources.com)
' *****************************************************************************
Class UplFichier

	Private ToutEnvoi

	Private VarFichierBin
	Private VarTailleFichier
	Private VarTailleBinFichier
	
	Private NomDesFichier()
	Private TailleDesFichier()
	Private NbDeFichiers
	Private LesFichiers()
	Private NomDesForm()
	Private CheminLocal
	Private CheminDistant()
	Private LocalNomFichier
	
	Private Property Let AjoutNomFichier(LeNom)
		Redim Preserve NomDesFichier(Ubound(NomDesFichier) + 1)
		NomDesFichier(Ubound(NomDesFichier)) = LeNom
	End Property

	Private Property Let AjoutTailleFichier(LaTaille)
		Redim Preserve TailleDesFichier(Ubound(TailleDesFichier) + 1)
		TailleDesFichier(Ubound(TailleDesFichier)) = LaTaille
	End Property

	Private Property Let AjoutCheminDistant(LeCheminDistant)
		Redim Preserve CheminDistant(Ubound(CheminDistant) + 1)
		CheminDistant(Ubound(CheminDistant)) = LeCheminDistant
	End Property

	Private Property Let AjoutFichier(LeFichier)
		Redim Preserve LesFichiers(Ubound(LesFichiers) + 1)
		LesFichiers(Ubound(LesFichiers)) = LeFichier
	End Property

	Private Property Let AjoutNomForm(LeNomForm)
		Redim Preserve NomDesForm(Ubound(NomDesForm) + 1)
		NomDesForm(Ubound(NomDesForm)) = LeNomForm
	End Property

	Public Property Let Dossier(LeDossier)
		CheminLocal = LeDossier
	End Property

	Public Property Let NouveauNom(NouvNomFichier)
		LocalNomFichier = NouvNomFichier
	End Property

	Public Function SauveFichier(Lequel)
		On Error Resume Next
		Dim fso, fs
		If LocalNomFichier = "" Then
			LocalNomFichier = NomDesFichier(Lequel)
		End If
		Set fso = CreateObject("Scripting.FileSystemObject")
		Set fs = fso.OpenTextFile(CheminLocal & LocalNomFichier, 2, True)
			If Err.Number <> 0 Then Response.Write "Erreur lors de l'écriture du fichier : " & CheminLocal & NomDesFichier(Lequel) & vbCrLf & Err.Description & "<br>":LocalNomFichier = "":Exit Function
			fs.Write LesFichiers(LeQuel)
			If Err.Number <> 0 Then Response.Write "Erreur lors de l'écriture du fichier : " & CheminLocal & NomDesFichier(Lequel) & vbCrLf & Err.Description & "<br>":LocalNomFichier = "":Exit Function
		Set fs = Nothing
		Set fso = Nothing
		LocalNomFichier = ""
	End Function

	Public Property Get NomFichier(Lequel)
		NomFichier = NomDesFichier(Lequel)
	End Property

	Public Property Get CheminFichierDistant(Lequel)
		CheminFichierDistant = CheminDistant(Lequel)
	End Property

	Public Property Get TailleFichier(Lequel)
		TailleFichier = TailleDesFichier(Lequel)
	End Property

	Public Property Get NomForm(Lequel)
		NomForm = NomDesForm(Lequel)
	End Property

	Public Property Get NbFichiers()
		NbFichiers = NbDeFichiers
	End Property

	Private Property Get HttpContentType()
		HttpContentType = Request.ServerVariables ("HTTP_CONTENT_TYPE")
	End Property

	Public Property Get TypeFichier(Lequel)
		TypeFichier = TypeDeFichier(NomDesFichier(Lequel))
	End Property

	Public Property Get ExtensionFichier(Lequel)
		ExtensionFichier = Right(NomDesFichier(Lequel), Len(NomDesFichier(Lequel)) - InStrRev(NomDesFichier(Lequel),"."))
	End Property

	Private Function Preliminaires()
		VarFichierBin = Request.BinaryRead(Request.TotalBytes)
		VarTailleBinFichier = LenB(VarFichierBin)
	End Function

	Private Sub Class_Initialize()
		ReDim NomDesFichier(0)
		ReDim LesFichiers(0)
		ReDim TailleDesFichier(0)
		Redim NomDesForm(0)
		ReDim CheminDistant(0)
		CheminLocal = Server.MapPath(".\") & "\" ' Dossier d'upload par defaut
		LocalNomFichier = "" ' Nom du fichier si l'on souhaite forcer un autre nom que le fichier envoyé
		Call Preliminaires
		Call LetsGOOOO
	End Sub

	Private Sub Class_Terminate()
		Set NomDesFichier = Nothing
		Set LesFichiers = Nothing
		Set TailleDesFichier = Nothing
	End Sub

	Private Function Upl2ADO()
		On Error Resume Next
		Upl2ADO = False
		Dim MonObjRs
		Set MonObjRs = CreateObject("ADODB.Recordset")
			MonObjRs.Fields.Append "TmpBin", 201, VarTailleBinFichier
			MonObjRs.Open
			MonObjRs.AddNew
			MonObjRs("TmpBin").AppendChunk VarFichierBin
			MonObjRs.Update
			ToutEnvoi = MonObjRs("TmpBin")
			MonObjRs.Close
		Set MonObjRs = Nothing
		If Err.Number <> 0 Then Response.Write "Erreur lors de l'upload du/des fichier(s) : " & vbCrLf & Err.Description & "<br>" : Exit Function
		Upl2ADO = True
	End Function

	Public Function LetsGOOOO()
		Dim LesLimites, LimitePosition
		Dim CompteFichier
		Dim DernierFichierDebut, DernierFichierFin, FichierEnCours
		Dim DebutNomFichier, FinNomFichier, NomDuFichier, DernierFichier
		Dim DebutFichier, FinFichier, DonneesDuFichier
		Dim LeContentType, TailleDuFichier, NomInput

		If Not VarTailleBinFichier > 0 Then
			Response.Write "Aucun fichier n'a été sélectionné"
			Exit Function
		End If

		If Upl2ADO = True Then
			' On Récupère l'entête HTTP
			LesLimites = HttpContentType

			' On met notre compteur de Fichier à 0
			CompteFichier = 0

			' On cherche les limites (les Boundaries)
		    LimitePosition = InStr(1, LesLimites, "boundary=") + 8
		    LesLimites = "--" & Right(LesLimites, Len(LesLimites) - LimitePosition)

			' ********************************************
			' ** Les choses sérieuses commencent ici :) **
			' ********************************************

			' On cherche le 1er fichier
			DernierFichierDebut = InStr(1, ToutEnvoi, LesLimites)
		    DernierFichierFin = InStr(InStr(1, ToutEnvoi ,LesLimites) + 1 , ToutEnvoi , LesLimites) - 1
			DernierFichier = False

			Do While DernierFichier = False
				FichierEnCours = Mid(ToutEnvoi, DernierFichierDebut, DernierFichierFin - DernierFichierDebut)
		    	DebutNomFichier = InStr(1, FichierEnCours, "filename=") + 10
		    	FinNomFichier = InStr(DebutNomFichier, FichierEnCours, Chr(34))
				
				' On vérifie que le champ du fichier n'est pas vide
		    	If DebutNomFichier <> FinNomFichier Then
					CompteFichier = CompteFichier + 1
					' On récupère le(s) nom(s) du/des champ(s) Input du formulaire
		    		NomInput = InStr(1, FichierEnCours, "name=""")
		    		If NomInput > 0 Then
		    			NomInput = Mid(FichierEnCours, NomInput + 6, InStr(NomInput + 6, FichierEnCours, """") - NomInput - 6)
		    		End If
					AjoutNomForm = NomInput
					'Response.Write NomInput & "<br>"
					
					' On récupère le chemin du fichier (distant) puis on extrait juste le non du fichier
		    		NomDuFichier = InStr(1, FichierEnCours, "filename=""")
		    		If NomDuFichier > 0 Then
		    			NomDuFichier = Mid(FichierEnCours, NomDuFichier + 10, InStr(NomDuFichier + 10, FichierEnCours, """") - NomDuFichier - 10)
		    		End If
					'Response.Write NomDuFichier
					
					AjoutCheminDistant = NomDuFichier
					NomDuFichier = Right(NomDuFichier, Len(NomDuFichier) - InStrRev(NomDuFichier,"\"))

					' On repère le début du fichier qui se trouve après le Content-Tpye
		    		LeContentType = InStr(1, FichierEnCours, "Content-Type:")
		    		If LeContentType > 0 Then
		    			DebutFichier = InStr(LeContentType, FichierEnCours, vbCrLf) + 4
		    		End If
		    		FinFichier = Len(FichierEnCours)

				    ' Calcul de la taille du fichier
		    		TailleDuFichier = FinFichier - DebutFichier

				    ' Recup. du fichier
		    		DonneesDuFichier = Mid(FichierEnCours, DebutFichier, TailleDuFichier)

					AjoutFichier = DonneesDuFichier
					AjoutNomFichier = NomDuFichier
					AjoutTailleFichier = Len(DonneesDuFichier) 'LaTaille
				End If
				' On va au fichier suivant
				' On repère le début et la fin du fichier suivant
			    DernierFichierDebut = InStr(DernierFichierFin + 1, ToutEnvoi, LesLimites)
			    DernierFichierFin = InStr(DernierFichierDebut + 1 , ToutEnvoi, LesLimites) - 1
				If Not DernierFichierFin > 0 Then DernierFichier = True
			Loop
			NbDeFichiers = CompteFichier
			' ************************
			' ** La Fin du bazar :) **
			' ************************

		Else
			Response.Write "Il y a eu une erreur lors de l'upload"
		End If

	End Function

	Private Function TypeDeFichier(LeFichier)
		Dim TmpExt
			TmpExt = Right(LeFichier, Len(LeFichier) - InStrRev(LeFichier,"."))
        Select Case LCase(TmpExt)
            Case "jpg", "jpeg"
                TypeDeFichier = "image/jpeg"
            Case "gif"
                TypeDeFichier = "image/gif"
            Case "png"
                TypeDeFichier = "image/png"

            Case "txt"
                TypeDeFichier = "text/plain"
            Case "asp"
                TypeDeFichier = "text/asp"
            Case "html", "htm"
                TypeDeFichier = "text/html"
            Case "xml"
                TypeDeFichier = "text/xml"

            Case "doc"
                TypeDeFichier = "application/msword"
            Case "doc"
                TypeDeFichier = "application/vnd.ms-excel"
            Case "pdf"
                TypeDeFichier = "application/pdf"

            Case "exe"
                TypeDeFichier = "application/x-msdownload"
            Case "zip"
                TypeDeFichier = "application/x-compressed"
            Case "rar"
                TypeDeFichier = "application/x-rar-compressed"

			Case "mp3", "mp2"
				TypeDeFichier = "audio/mpeg"
			Case "au"
				TypeDeFichier = "audio/basic"
			Case "wav"
				TypeDeFichier = "audio/x-wav"

			Case "mpg", "mpeg"
				TypeDeFichier = "video/mpeg"
			Case "avi"
				TypeDeFichier = "video/avi"
			' Liste non exhaustive, vous pouvez en rajouter autant que vous voulez

            Case Else
                TypeDeFichier = "application/unknown"
        End Select
	End Function

End Class
%>
<!----------- Fin Fichier clsUplFich.asp --------->   

 Conclusion

P.S : Cette fois, je veux pas entendre parler que ce source serait déjà sur un autre site parce que :
1) C'est pas possible :)
2) J'ai passé la soirée et la nuit à le faire :(


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

10 décembre 2005 10:34:39 :
.

 Sources du même auteur

Source avec une capture Source .NET (Dotnet) RÉCUPÉRER L'ADRESSE IP D'UN NOM DE DOMAINE AVEC ASP.NET
Source avec une capture Source .NET (Dotnet) FAIRE UN HISTORGRAMME (EN GIF) À LA VOLÉE EN ASP.NET
Source .NET (Dotnet) ENVOYER UN MAIL LORSQU'UNE PAGE GÉNÈRE UNE ERREUR
Source .NET (Dotnet) RÉCUPÉRER UNE PAGE WEB À TRAVERS UNE PAGE ASP.NET
Source avec Zip UPLOADER UN FICHIER SANS COMPOSANT V2.0

 Sources de la même categorie

Source .NET (Dotnet) IMPORTER UN FICHIER EXCEL DEPUIS UN POSTE ET L'AJOUTER SUR L... par jseblavoie
SERVER.MAPPATH QUI ACCEPTE LES ../ par divlys
UPLOAD D'IMAGES VIA ADODB.STREAM ET SQL SERVER par Nicolas_kojack
LISTING DE FICHIERS ET RÉPERTOIRES (FONCTION RÉCURSIVE) par Warwick
Source avec Zip UTILITAIRE POUR FORCER LE TÉLÉCHARGEMENT D'UN FICHIER SUR UN... par shaiulud

 Sources en rapport avec celle ci

UPLOAD D'IMAGES VIA ADODB.STREAM ET SQL SERVER par Nicolas_kojack
CONVERTIR RAPIDEMENT UN FICHIER UPLOADÉ (IMAGE) ET OBTENIR L... par ObelixSuisse
TUTORIAL ASPSMARTUPLOAD (POUR AIDER CEUX QUI COMME MOI N'ONT... par ranouf
Source avec Zip Source .NET (Dotnet) ASP.NET UPLOAD D'UN FICHIER DU PC CLIENT VERS VOTRE SITE par michelsto
Source avec Zip UPLOADER UN FICHIER SANS COMPOSANT V2.0 par Nix

Commentaires et avis

Commentaire de netjl le 01/02/2002 09:36:29

J'ai un pb, j'ai mis ton code sur un site distant et lorsque je lance le fichier, et que je valide, voici ce que j'obtiens :

Fichier N° 1
Nom du fichier : essai.txt
Taille : 65 octets
Extension : txt
Type mime : text/plain
Nom de l'Input : Fichier1
Chemin distant : C:Mes documentsessai.txt

Erreur lors de l'écriture du fichier : D:Inetpubwwwrootenlimousindossieressai.txt Permission refusée

POurquoi il prend D: .... au lieu du chemin dans lequel se trouve le fichier asp et comment lui indiquer le chemin de mon serveur ?

Merci

Commentaire de kehel le 15/04/2002 12:23:48

Je viens d'insérer ce code dans mes pages et j'ai cette erreur :
Erreur de compilation Microsoft VBScript erreur '800a0400'

Instruction attendue

Option Explicit
^

Que dois je faire ???

Merci

Commentaire de BigDan2 le 19/04/2002 22:19:03

Salut Nix, ton code fonctionne très bien,
Si le site est Anonymous, mais avec une sécurité d'une petite base Access (ce site privé et il est chez un provider et j'utilise Access pour gérer les usager), est-ce que nous pourrions envoyer un nom d'usager et un mot de passe (du serveur Web que le provider ma donner)  pour éviter de donner des droits à anonymous d'écriture.

Commentaire de aluminium le 06/05/2002 09:57:14

je voudrais savoir comment on peut tester si le champ file a été rempli ou non car si il reste vide et qu'on veut enregistrer ce champ, il y a le message d'erreur 'lequel' qui apparait qd on écrit MonUpload.NomFichier(1)

elp me please

Commentaire de rea1975 le 15/05/2002 09:44:46

J'ai essayé ce code sur mon serveur mais ca marche pas, ca bloque le serveur lors du chargement et me renvoi une erreur comme quoi il a y plusieurs requétes simultanées.

Commentaire de epac le 26/06/2002 08:36:53

Salut Nix, ton code me parait tres interessant mais me pose quelques soucis...
Tu trouveras ci dessous le message d'erreur qui m'est renvoyé.
8-)
e-PAC

Erreur de compilation Microsoft VBScript erreur '800a0401'

Fin d'instruction attendue

/epac/temp/clsUplFich.asp, ligne 29

Private Property Let AjoutNomFichier(LeNom)
-----------------^

Commentaire de ghislain le 02/08/2002 11:11:32

bonjour,
je trouve que ça marche trés bien, mais comment dois-je faire, pour mettre le rapport dans une DB ou plutôt, ou dois-je mettre mon code, j'ai essayer dans uploadfichier.asp après le end select (j'ai essayé de le mettre avant aussi) et ça ne marche pas, le fichier est bien uploder mais la DB n'est pas mise à jour.
merci d'avance
ps: vous pouvez me répondre à gd@adtech.be

Commentaire de demba le 19/08/2002 02:49:19

Salut,
Je trouve le code trés bon. On aurait pu gérer la taille maximale à accepter pour uploader.
Mon problème :  Aprés la saisie des ifos et le choix du fichier à uploader; je voudrais l'afficher avant de valider l'opération d'envoi.
ps : vous pouvez me répondre aussi à dembaro@hotmail.com

Commentaire de zorlac le 30/05/2003 13:56:09

la classe est clair mais tu as qd mm du utilisé un composant... ;-)
pour le fso, beau boulot néanmoins

Commentaire de twawks le 14/08/2003 10:15:33

Hello ! J'ai testé ton upload ! résultat : ca upload mais ca génère tout de même une erreur :( peux tu m'éclairer ?
A noter le beau travail que tu as fait !
Twawks


Fichier N° 1
Nom du fichier : aspfr_source_170.zip
Taille : 8974 octets
Extension : zip
Type mime : application/x-compressed
Nom de l'Input : Fichier1
Chemin distant : C:Documents and SettingsadminMes documentsaspfr_source_170.zip

Microsoft VBScript runtime error '800a000d'

Type mismatch

/upload/clsUplFich.asp, line 128

Commentaire de kevtuning le 19/11/2003 11:11:27

Bien joué Nix.... et en plus la classe est tres claire...

Par contre, il y a un petit qqch qui m'ennuie...

lorsque je fais un upload dans le meme repertoire que mes pages asp... il n'y a pas de probleme...

par contre lorsque je veux uploader dans un repertoire /upload/ par exemple (avec la permission d'ecriture etc...) ben j'ai
Erreur lors de l'écriture du fichier : pathupload
omdufichier.txt Permission denied
au moment du Set fs = fso.OpenTextFile(CheminLocal & LocalNomFichier, 2, True)

Si quelqu'un a une idee, elle est la bienvenue...

Merci

Commentaire de kevtuning le 19/11/2003 11:49:07

juste pour vous dire de ne pas tenir compte de mon post precedent...

j'avoue... j'ai dit une connerie...

Bravo Nix...

Commentaire de kevtuning le 20/11/2003 10:32:55

pour les gens qui ont un problème de Mid...

J'ai eu le meme probleme.... et c'etait du au dait que j'avais mis un nom à mon bouton submit...

il faut laisser &lt;input type="submit" value="Envoyer !"&gt; et ne pas mettre de nom a ce bouton.... (vous pourvez bien sur changer le libelle) mais pas mettre name="bouton" ...

Commentaire de fifi3 le 25/11/2003 10:43:09

Bonjour à tous,

J'aurais besoin d'un petit coup de main, svp.
Je voudrais uploader un fichier du poste client vers le serveur en ASP/JavaScript (je n'ai pas le choix c'est la norme dans ma boite)
Le fichier est de type texte.

&lt;form name="frmRecharge" id="frmRecharge" enctype="multipart/form-data" method="post" action="VAMiseaJour.asp"&gt;

&lt;input type="file" id="file1" name="file1"/&gt;

&lt;input type="image" id="subValidate" name="subValidate" src="../../images/bouton/bvalid1.gif"   height="25" onmouseover="src='../../images/bouton/bvalid2.gif';" onmouseout="src='../../images/bouton/bvalid1.gif'"/&gt;

&lt;/form&gt;




Merci pour votre aide !

A+
Fifi3

Commentaire de golfgcarel le 07/10/2004 16:12:14

Bravo Nix,
j'ai la m^me erreur que d'autres personnes. l'upload se déroule parfaitement bien, mais j'ai une erreur :
"Erreur d'exécution Microsoft VBScript Support technique Microsoft "

Pourrais-tu m'aider, s'il-te-plait?

Golfgcarel

Commentaire de thierrydelepine le 19/03/2005 22:32:53

Ce code fonctionne a merveille,
mais quel est la taille maxi d'un fichier que l'on peut uploader ?

pour des fichiers inferieurs a 6 8 Mo cela fonctionne bien, mais pour des fichiers de 20 ou 30 Mo j'ai le message suivant :

Pages ASP error 'ASP 0113'
Délai d'exécution du script dépassé
Le délai maximal d'exécution d'un script a été dépassé. Vous pouvez changer cette limite en donnant une nouvelle valeur à la propriété Server.ScriptTimeout ou en changeant la valeur dans les outils d'administration d'IIS.

j'ai doublé le timeout sous IIS mais j'ai toujours le probleme,
je pense qu'il y a une limite de taille ????
avez vous une reponse ?

Commentaire de rodcobalt22 le 08/09/2005 18:57:09

bonjour à tous
j'ai un problème concernant le <input type=file>, je n'arrive pas à le limiter à un certain type d'extension comme les images par exemple.
je fais bien un accept="image/*", mais rien à faire il me sort toujours la même fenêtre
Que faire ?
Merci

Commentaire de mimo_predator le 02/02/2006 15:37:25

Je viens de lire l'article et trouve la méthode assez simpa. mais le seul hic c'est que pour récupérer les autre informations dans le formulaire comme INPUT ou SELECT ...; le problème c'est qu'il faut considérer les informations comme étant une information Binaire.


Pour info : le site suivant n'est pas valide : http://www.aspfr.com/article.asp?Val=119

Commentaire de mimo_predator le 02/02/2006 15:38:31

Aussi c'est le seul point ou PHP bas ASP car les fichiers pour lui c'est natif dommage pour Microsoft.

Commentaire de DOLLEL le 22/11/2006 19:58:18

Bonjour,

Ton code est un top depuis plusieurs années. Je l'utilise depuis pas mal de temps, mais depuis que j'ai transféré une appli de Win 2000 Server vers Win 2003, l'upload d'un gros fichier (>1Mo) provoque le message d'erreur: "Operation not allowed". Je cherche pourquoi depuis un certain temps. Peux-tu m'aider sur ce coup?

Merci d'avance.

Laurent

Commentaire de DOLLEL le 22/11/2006 21:10:24

Rebonjour,

J'ai oublié de dire quelle commande provoque le message d'erreur "Operation not allowed", c'est "Request.Binaryread".

Merci.

Laurent

Commentaire de kevtuning le 23/11/2006 08:30:22

C'est un problème de IIS 6.0

tu trouveras la solution ici... http://support.softartisans.com/kbview_900.aspx

Commentaire de pifou25 le 30/07/2007 12:03:34

Bonjour,
J'ai résolu le pb (que certains ont eu ici aussi) ligne 128 type incompatible (type mismatch): remplacer la procedure ainsi:

Private Sub Class_Terminate()
ReDim NomDesFichier(0)
ReDim LesFichiers(0)
ReDim TailleDesFichier(0)
End Sub

Set NomDesFichier = Nothing : ça rime à rien vu que la variable n'est pas un objet, donc ça pete. En plus c'est à cause du option explicit, sinon je suis sur que ça passerait ^^

Par contre si on a l'erreur suivante, que faire?

Erreur de compilation Microsoft VBScript erreur '800a0400'
Instruction attendue
Option Explicit
^

Commentaire de aqkoukou le 17/06/2008 11:24:24

Bravo pour ce source.
Juste un problème de syntaxe qui me bloque

Dans MonUpload.NouveauNom = je souhaite récupérer un code d'une page précédente par code=request("cod")et composer un nouveau nom tel que
"\images\" & code & "-" & MonUpload.NomFichier(i)
Cette syntaxe ne marche pas. J'en ai essayé un tas d'autres bien sûr.
Merci de votre aide précieuse.
Aqkoukou

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Upload du fichier avec Class UplFichier de Nix [ par maida5 ] Bonjour,j'utilise upload de fichier de Nix avec le class UplFichier. Quand je fais upload de deux images en même temps ça marche très bien. Après ça, pb sur upload de fichier en asp.net avec c# [ par amorosalain ] SAMPour des clients qui veulent transf&#233;rer des fichiers de grosses taille sur le serveur, j'ai mis en place un service de ftp via un site web. Po [ASP.NET][C#]taille de l'upload limiter [ par EvilDef ] boujour&nbsp;a tous,j'ai un probleme avec ma page d'envoi de fichier (pour q'un utilisateur puisse envoyer un fichier sur mon ftp)j'ai le m&#234;me pr Upload fichier [ par fdthierry ] Bonjour &#224; tous,J'ai pris le code propos&#233; &#224; cette adresse <SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font Upload avec commentaire [ par kclaude ] Hello,Etant novice dans l'asp et voulant quelque chose qui me parait assez difficile (enfin pour moi vue mon niveau pour le moment) je me tourne donc Supprimer un fichier apres un upload [ par flo_yopyop ] Voila, je vous explique : - jai cr&#233;er une page ASP.net pour uploader des fichiers - tout fonctionne bien, le fichier et copier ds le dossier vo probleme Uploader Fichier [ par sergiodonini ] Bonjour M.Nix, j'ai un petit probleme quand j'upload un fichier sur le serveur iis.&nbsp; je me suis servi de votre code qui se trouve sur l'adresse s Upload fichier [ par ProphetKy ] Bonjour &#224; tous,je voudrais faire un beau module d'upload de fichier vers le serveur.Mais je n'arrive pas &#224; rendre certaines actions de l'uti problème d'upload [ par legoland ] Salut à tous,J'utilise AspSmartUpload et lorsque j'uploade mon fichier sur le serveur sof que le fichier créé pèse 1ko et ne peux pas être lu. Pourtan Upload fichier via ftp dans une page ASP.NET [ par RubMic ] Voila, je suis très très débutant dans ce domain, mais je dois faire une application qui dois envoi une image sur mon serveur WEB et je ne sais pas co


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,770 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales