begin process at 2012 02 08 19:15:05
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers/Disque

 > UPLOADER UN FICHIER SANS COMPOSANT V2.0

UPLOADER UN FICHIER SANS COMPOSANT V2.0


 Information sur la source

Note :
8,1 / 10 - par 21 personnes
8,10 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers/Disque Classé sous :upload, fichier, multiple, champ, texte Niveau :Initié Date de création :18/07/2001 Date de mise à jour :10/12/2005 10:36:01 Vu / téléchargé :32 484 / 1 299

Auteur : Nix

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


 Description

Pas grand chose de plus que la version précédente à part une petite option mais pas des moindres :) qui permet de récupérer des champs de type text, textaera, checkbox, radio, etc... en même temps que l'upload d'un fichier.

Cela faisait un certain temps que l'on me demandait comment faire, j'avais pas trouvé le temps avant de m'y pencher et comme j'ai eu besoin de cette option pour un projet, j'ai pris le temps de le faire et donc de vous en faire profiter au passage :)
La version précédente se trouve sur cette page : http://www.aspfr.com/code.aspx?id=8645

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>
  • FICHIER1 : <input type="file" name="Fichier1" accept="image/jpeg"><br>
  • FICHIER2 : <input type="file" name="Fichier2" accept="image/jpeg"><br>
  • FICHIER3 : <input type="file" name="Fichier3" accept="image/jpeg"><br>
  • TEXTE : <input type="text" name="txttest"><br>
  • TEXTAERA : <textarea cols="" rows="" name="txtarea"></textarea><br>
  • <input type="submit" value="Envoyer !">
  • </form>
  • </div>
  • <%
  • ' On Error Resume Next
  • 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
  • %>
  • <font color="#FF0000">
  • <%
  • ' .ChampForm(NomDuChamp) permet de récupérer un Champ texte,
  • ' il fonctionne comme l'Objet Request()
  • %>
  • <b>TEXTE : </b><%=MonUpload.ChampForm("txttest")%><br>
  • <b>TEXTAERA : </b><%=MonUpload.ChampForm("txtarea")%><br>
  • </font>
  • <%
  • Set MonUpload = Nothing
  • End Select
  • %>
  • </font>
  • </body>
  • </html>
  • <!----------- Fin Fichier uploadfichier.asp --------->
  • <!----------- Fichier clsUplFich.asp --------->
  • <!--#include file="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 NomChampTXT()
  • Private LesChampTXT()
  • Private Property Let AjoutChampTXT(LeTxt)
  • Redim Preserve LesChampTXT(Ubound(LesChampTXT) + 1)
  • LesChampTXT(Ubound(LesChampTXT)) = LeTxt
  • End Property
  • Private Property Let AjoutChampNOM(LeNom)
  • Redim Preserve NomChampTXT(Ubound(NomChampTXT) + 1)
  • NomChampTXT(Ubound(NomChampTXT)) = LeNom
  • End Property
  • 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 ChampForm(Lequel)
  • For i = 1 To UBound(NomChampTXT)
  • If NomChampTXT(i) = Lequel Then
  • ChampForm = LesChampTXT(i)
  • Exit For
  • End If
  • Next
  • End Property
  • 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)
  • Redim LesChampTXT(0)
  • Redim NomChampTXT(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()
  • ' J'ai mis ces lignes en commentaire car des fois, il me dit type incompatible ?!?
  • '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
  • Dim EstFichier
  • 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
  • ' On récupère le chemin du fichier (distant) puis on extrait juste le non du fichier
  • NomDuFichier = InStr(1, FichierEnCours, "filename=""")
  • EstFichier = False
  • If NomDuFichier > 0 Then
  • EstFichier = True
  • NomDuFichier = Mid(FichierEnCours, NomDuFichier + 10, InStr(NomDuFichier + 10, FichierEnCours, """") - NomDuFichier - 10)
  • End If
  • ' Ici la petite astuce, on vérifie si cet "input" contient un Fichier
  • If EstFichier = True Then
  • 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
  • Else
  • ' C'est ici que cela se passe pour récupérer les valeurs
  • ' tapées dans un champ text, textaera, radio button, checkbox etc...
  • CompteFichier = CompteFichier - 1
  • DebutFichier = InStr(InStr(1, FichierEnCours, "name=""") + 6, FichierEnCours, """") + 5
  • FinFichier = Len(FichierEnCours)
  • ' Calcul de la taille du texte
  • TailleDuFichier = FinFichier - DebutFichier
  • ' Recup. du texte
  • DonneesDuFichier = Mid(FichierEnCours, DebutFichier, TailleDuFichier)
  • AjoutChampNOM = NomInput
  • AjoutChampTXT = DonneesDuFichier
  • End If
  • 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 "log"
  • TypeDeFichier = "text/plain"
  • 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>
    FICHIER1 : <input type="file" name="Fichier1" accept="image/jpeg"><br>
    FICHIER2 : <input type="file" name="Fichier2" accept="image/jpeg"><br>
    FICHIER3 : <input type="file" name="Fichier3" accept="image/jpeg"><br>
	TEXTE : <input type="text" name="txttest"><br>
	TEXTAERA : <textarea cols="" rows="" name="txtarea"></textarea><br>
    <input type="submit" value="Envoyer !">
</form>
</div>
<%
'	On Error Resume Next
		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
			%>
			<font color="#FF0000">
			<%
				' .ChampForm(NomDuChamp) permet de récupérer un Champ texte, 
			 	' il fonctionne comme l'Objet Request()
			%>
			<b>TEXTE : </b><%=MonUpload.ChampForm("txttest")%><br>
			<b>TEXTAERA : </b><%=MonUpload.ChampForm("txtarea")%><br>
			</font>
			<%
			Set MonUpload = Nothing
	End Select
	%>	
</font>
</body>
</html>
<!----------- Fin Fichier uploadfichier.asp --------->

<!----------- Fichier clsUplFich.asp --------->
<!--#include file="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 NomChampTXT()
	Private LesChampTXT()
	
	Private Property Let AjoutChampTXT(LeTxt)
		Redim Preserve LesChampTXT(Ubound(LesChampTXT) + 1)
		LesChampTXT(Ubound(LesChampTXT)) = LeTxt
	End Property

	Private Property Let AjoutChampNOM(LeNom)
		Redim Preserve NomChampTXT(Ubound(NomChampTXT) + 1)
		NomChampTXT(Ubound(NomChampTXT)) = LeNom
	End Property

	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 ChampForm(Lequel)
		For i = 1 To UBound(NomChampTXT)
			If NomChampTXT(i) = Lequel Then
				ChampForm = LesChampTXT(i)
				Exit For
			End If
		Next
	End Property

	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)
		Redim LesChampTXT(0)
		Redim NomChampTXT(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()
		' J'ai mis ces lignes en commentaire car des fois, il me dit type incompatible ?!?
		'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
		Dim EstFichier
		
		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
					
					' On récupère le chemin du fichier (distant) puis on extrait juste le non du fichier
		    		NomDuFichier = InStr(1, FichierEnCours, "filename=""")
					EstFichier = False
		    		If NomDuFichier > 0 Then
						EstFichier = True
		    			NomDuFichier = Mid(FichierEnCours, NomDuFichier + 10, InStr(NomDuFichier + 10, FichierEnCours, """") - NomDuFichier - 10)
		    		End If
				
					' Ici la petite astuce, on vérifie si cet "input" contient un Fichier
					If EstFichier = True Then
						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

					Else
						' C'est ici que cela se passe pour récupérer les valeurs 
						' tapées dans un champ text, textaera, radio button, checkbox etc...
						CompteFichier = CompteFichier - 1
						DebutFichier = InStr(InStr(1, FichierEnCours, "name=""") + 6, FichierEnCours, """") + 5
			    		FinFichier = Len(FichierEnCours)

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

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

						AjoutChampNOM = NomInput
						AjoutChampTXT = DonneesDuFichier
					End If
				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 "log"
                TypeDeFichier = "text/plain"

            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

Voilà, amusez-vous bien :)

Nix

 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:36:01 :
.

 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
CONVERTION DE DATE FRANÇAISE VERS UNE DATE ANGLAISE

 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

CHERCHER ET REMPLACER UN MOT DANS UN FICHIER TEXTE par roro59650
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 UPLOADER UN FICHIER SANS COMPOSANT ! {NOUVELLE METHODE} par Nix

Commentaires et avis

Commentaire de Sickfrid le 08/01/2002 14:33:14

ce code est vraiment excellent mais une ptite question quand meme ! Peut-on avoir le nom de l'input file ? parceque mes input file sont éparpillés dans un formulaire au milieu de plusieurs autres input...

Merci ! ! ! ! !

PS : ssvp c'est assez urgent...

Commentaire de sdh le 21/01/2002 12:00:31

Ton code est super bien fichu. Code clair, indetation impécable, RAD.
Si j'ai trouvé une erreur de copier / coller, dans la fin de ton code dans la fonction "type de fichier", le type d'extention d'un fichier excel est xls, mais tout le monde aura rectifier de lui même

Merci pour pour code et pour ton site

Commentaire de netjl le 01/02/2002 10:01:37

Salut Nix je tente de laisser un message ici aussi, car c'est cette version que j'utilise, j'ai mis ton script sur un serveur de site internet distant, et j'ai le message suivant :

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
TEXTE : essai texte
TEXTAERA : essai text area

Comment faire pour que ton pgm prenne mon chemin de serveur en compte et non D:inetpub ...etc.

Merci

Commentaire de JaySee le 12/04/2002 12:52:07

Ton script est super bien foutu et surtout surper facile a comprendre mais g un chti bleme...

Lorsque j'essai ta page d'exemple car marche nickel et g bien mon fichier d'ecrit sur le serveur, mais si je passe par un formulaire a moi un peu plus complet je me retrouve avec:

Erreur d'exécution Microsoft VBScript (0x800A0009)
Indice en dehors de la plage: 'Lequel'
/FR/Perso/clsUplFich.asp, line 112

(correspond a l:
L111: Public Property Get TailleFichier(Lequel)
L112: TailleFichier = TailleDesFichier(Lequel)
L113: End Property

sinon desfois g aussi:
Argument ou appel de procédure incorrect: 'Mid'
fichier:clsUplFich.asp à la ligne :DonneesDuFichier = Mid(FichierEnCours, DebutFichier, TailleDuFichier)

strange car avec ton formulaire ca pase nickel...

T'en pense koi?

Merci

Commentaire de MarxKarl le 22/04/2002 15:19:13

j'ai essaye ce script et il est tout bonnement fabuleux. seul PB, sur ma station NT4 + SP6 + IIS ca marche nickel mais sur mon server NT4 + SP4 + IIS ca ne marche pas !!!
j'en devien fou ... qu'ai je oublier d'installer (je ne peut pas rebooter le server il est en cour de fonctionnement)

merci de votre aide.

Commentaire de MarxKarl le 22/04/2002 15:22:43

PS : j'ai installer M$ script et ca ne vien pas de la.
(WARNING : M$ script est necessaire pour realiser des classes avec NT4 + SP6 + IIS)

j'ai reelement besoin d'aide.

Commentaire de theryu le 29/04/2002 17:58:53

Bonjour,

Félicitation pour ce code génial, cependant, il contient un petit hic : le nom des input files renvoyés ne correspond pas toujours à ceux des fichiers liés.

Explication :
- si je laisse la page d'exemple tel quel, et que j'envoie trois fichiers, tout ce déroule normalement : le nom de l'input de mon premier fichier s'appelle bien fichier1, celui de mon deuxième fichier2, etc.
- si en revanche je n'envoie que deux fichiers dans les input 'fichier2' et 'fichier3', j'obtiens que le nom de l'input du premier fichier est 'fichier1' (au lieu de 'fichier2')et celui du deuxième 'fichier2' (au lieu de 'fichier3')

En fait, le nom de l'input qui est renvoyé est le nom de l'input correspondant à l'indice du fichier (si on traite le premier fichier c'est le nom du premier input du formulaire qui sera renvoyé, même si ce n'est pas un input file!)

Voilà, voilà... quelqu'un aurait-il une solution SVP ?

Commentaire de Rackham le 04/06/2002 10:49:16

Je me trompe peut-être mais est-ce normal que tu inclue un fichier dans lui-même ?

&lt;!----------- Fichier clsUplFich.asp ---------&gt;
&lt;!--#include file="clsUplFich.asp"--&gt;
&lt;%
Option Explicit

De plus chez moi, l'Option Explicit me renvoie une erreur :

Type d'erreur :
Erreur de compilation Microsoft VBScript (0x800A0400)
Instruction attendue
/test/clsUplFich.asp, line 4
Option Explicit

Sinon, merci bien pour ce code, ca marche nickel...

Commentaire de y0m le 05/06/2002 11:39:30

Je regardais le code source de l'exemple hier et j'ai remarqué une "erreur" qui correspond à un des posts ci dessus

' NomForm(ID) Retourne le nom du champ dans lequel était le fichier uploadé
Response.Write "Nom de l'Input : &lt;b&gt;" & MonUpload.NomForm(i) & "&lt;/b&gt;&lt;br&gt;"

Ce n'est vrai que dans le cas où les input de type file sont placés en tout premier dans le formulaire.
S'ils sont placés en fin, on obtient le nom d'un autre champ (tout dépend de l'organisation du formulaire).

Personnellement, je proposerais d'ajouter un tableau à la class "NomDesInputFiles()", ainsi que les méthodes associées à l'ajout et à la lecture.

Pour les habitués de aspSmartUpload, on voit que dans un cas comme celui de l'exemple fournit avec cette classe, 3 éléments de type "File" sont créés au sein de l'objet aspSmartUpload, et ce même si on n'a pas choisi de fichier pour l'un des 3 inputs.
Ici, la class ne crée d'élément "file" que si l'input contient quelque chose. Donc, si je rentre un fichier dans l'input "fichier2", la class crée un fichier et est accessible par :
MonUpload.NomFichier(1)

Enfiin, beau travail tout de même, ça mérite quelques améliorations mais c'est une class très pratique quand on sait que aspSmartUpload a tendance à "planté" à la création de l'objet alors que l'installation, les droits, l'accès à la DLL sont corrects.

Commentaire de konogan le 06/06/2002 11:13:12

tout d'abord felicitaions pour ce sript tres pratique, tout fonctionne a merveille chez moi.

j'ai juste une petite question :

comment faire en sorte que le fichier uploadé le soit sur un autre serveur que celui qui execute la page ?
en l'occurence dans un repertoire ftp sur un serveur independant.

Commentaire de vinygrr le 01/07/2002 12:01:51

ca marche parfaitement(j'ai evidemment fais des petites adaptations pour mon confort perso!!!)...WOOOAWW...merci Nix!;-)
juste une remarque...si le fichier que l'on upload existe deja on ecrase le fichier existant...y a pas un moyen pour dans ce cas la renommer le fichier???

Commentaire de cellofan le 09/07/2002 09:40:09

Salut Monsieur Nix et ts les autres. J'ai essayé ton script qu a tout d'abord très bien fonctionné, mais il me fait maintenant la même erreur qu'à "Djean", c'est à dire :
Argument ou appel de procédure incorrect: 'Mid'
fichier:clsUplFich.asp à la ligne :DonneesDuFichier = Mid(FichierEnCours, DebutFichier, TailleDuFichier)

Donc du coup, ca ne marche plus... Voilà, si qqu'un a une suggestion sur la question... Merci d'avance.

Commentaire de lutinpitchoune le 01/10/2002 13:11:16

Salut niX,

Avant tout, meme si on te l'as déjà dit, ton code est super,
je l'ai un peu modifier pour réaliser des tests avant d'enregistrer définitivement le fichier sur le site.
En fait j'utilise ton code pour enregistré mes fichiers dans un repertoire temp/
et après si les tests sont bons je déplace les fichiers de temp/ à upload/.
Cette technique m'a permis de ne pratiquement pas changer ton code.

Chez moi tout marche super, j'ai eu des problemes avec l'OPTION EXPLICIT,
mais j'ai tout réglé en definissant bien toutes mes variables.
Donc sur mon ordi chez moi ça marche, par contre au bureau, ca plante.
le premier formulaire s'affiche, je rentre les données, j'envoie et là ça plante et j'ai l'erreur suivante :

Erreur d'exécution Microsoft VBScript erreur '800a01b6'
Cet objet ne gère pas cette propriété ou cette méthode: 'Request.TotalBytes'

/wwwcna-mocom/clsUplFich.asp, ligne 132

Et elle se répete deux fois.
La ligne 132 correspond à :
Private Sub Class_Initialize()
ReDim NomDesFichier(0)
ReDim LesFichiers(0)
ReDim TailleDesFichier(0)
Redim NomDesForm(0)
ReDim CheminDistant(0)
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Redim LesChampTXT(0) &lt;&lt;&lt;&lt;&lt;&lt;&lt;Cette ligne

Sur le serveur j'ai pas encore pu essayer
car il faut que mon hebergeur modifie les droits d'acces au repertoire ou j'ai ma base de données,
mais j'ai peur que le même probleme se pose, même de temps en temps.

Si tu vois de quoi ça peut venir, dis le moi.
D'avance merci
Lutin Pitchoune

Au fait :
Mon installation chez moi :
Windows 95
Internet explorer 5
PWS v4.0 (je crois)
Au boulot :
Windows NT 4 Workstation
Internet explorer 5
Internet Information Server 2.0 version 4.0

Commentaire de xclear le 04/02/2003 00:01:11

ca marche super merci nix pour ce code juste une info serai t'il possible en plus de remplir un champs d'une base en même temps que le telechargement????
merci ecrivez a xclear@noos.fr
xclear vous remercie et vous salut

Commentaire de alouillet le 13/05/2003 14:44:24

Comme tout le monde, exactement ce que je voulais.

2 petites choses :
- Faire un fs.close pour les puristes dans SauveFichier

- Ajouter un Dim I dans Property Get ChampForm(Lequel) car si on ne fait pas ça et qu'on appel cette méthode dans la boucle de uploadFichier.asp cela interagit avec la variable I de la boucle.

Merci nix pour le gain de temps énorme

Commentaire de jayzee le 12/06/2003 17:01:23

ouep merci pour ce tres bon code !!

ca tourne nickel, bon moi aussi j'ai des petits soucis car mes input text sont positionnés avant les inputs file.
du coup je ne recupere jamais le bon nom de l'input et c po pratique pour le sauver en base.
mais bon c po grave, je vais essayer de trouver une parade.

en tous cas merci pour ce code

Commentaire de jayzee le 12/06/2003 17:24:04

Bon bah j'ai fait comme yOm a dit :

g ajouter un tableau NomDesFile()
ainsi kune propriete AjoutNomFile(LeNomFile)
et kune autre propriete NomFile(Lequel)

Ensuite dans la fonction LetsGOOOO, apres la ligne :
If EstFichier = True Then

j'ajoute le nom de l'input dans mon nouveau tableau :
AjoutNomFile = NomInput

et hop le tour est joué :)

Commentaire de Bruto le 17/12/2003 11:33:08

J'ai testé la source et elle marche bien lorsque je ne dispose que du &lt;input type="file" name="Fichier1" accept="image/jpeg"&gt; mais lorsque je rajoute un champ &lt;input name="Titre" type="text" value="" size="50"&gt; dans la page alors j'ai le même problème que Djean & cellofan

c'est à dire :
Argument ou appel de procédure incorrect: 'Mid'
fichier:clsUplFich.asp à la ligne :DonneesDuFichier = Mid(FichierEnCours, DebutFichier, TailleDuFichier)

Si quelqu'un a su intégré un champ texte. qu'il me dis comment il a fait. Merci

Commentaire de Bruto le 17/12/2003 14:14:06

Après quelques tests sur mon problème, j'ai trouvé la solution pour Djean & cellofan. Pour contrer le problème Mid ( voir message ci-dessus ), j'ai mis mon &lt;input type="file" name="Fichier1" accept="image/jpeg"&gt; dans sa propre form
Ex :
&lt;TABLE BGCOLOR=#EEEEEE WIDTH=300 NOBORDER CELLPADDING=0 CELLSPACING=0&gt;
&lt;tr&gt;
  &lt;td&gt;
     &lt;IMG SRC='Img/i.p.folder.drafts.gif' WIDTH=15 HEIGHT=12align=left hspace=5&gt;&nbsp;&nbsp;&lt;B&gt;T&lt;/B&gt;itre de la source
  &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;&lt;input type="text" name="Titre" value="" size="50"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;TR&gt;
  &lt;TD&gt; &lt;IMG SRC='Img/i.p.putinfolder.gif' WIDTH=15 HEIGHT=12 align=left hspace=5&gt;&nbsp;&nbsp;&lt;B&gt;A&lt;/B&gt;jouter un fichier&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TABLE&gt;
&lt;TABLE BGCOLOR=#EEEEEE WIDTH=300 NOBORDER CELLPADDING=0 CELLSPACING=0&gt;
   &lt;FORM name="Identification" method="post" action="gestsource.asp?Cat=2&Page=1&Etape=1" enctype="multipart/form-data"&gt;
   &lt;TR&gt;
      &lt;TD colspan="2"&gt;
          &lt;input type="file" id="UploadFichier" name="Fichier1" accept="image/jpeg" /&gt;
      &lt;/TD&gt;
   &lt;/TR&gt;
   &lt;tr&gt;
       &lt;td WIDTH=100&gt;&lt;/td&gt;
       &lt;TD align="right"&gt;&nbsp;&lt;INPUT TYPE='submit' class=btnfrm VALUE="Upload"&gt;
        &lt;/TD&gt;
    &lt;/tr&gt;
&lt;/FORM&gt;
&lt;/TABLE&gt;

Si on met d'autres champs dans la même form que le champ de type file alors ça plante avec Mid.
En espérant que ça aide

Commentaire de rafikov le 26/01/2004 03:33:44

salut Nix, Ton code est génial. Merci. il roule tres bien.

Sauf que j'ai un problème avec la fonction qui permet de récupérer des champs de type text, textaera, checkbox, radio, etc... en même temps que l'upload d'un fichier.

En effet, cette fonction n'a pas prévu le cas ou j'ai un groupe de checkbox dans mon formulaire et que je dois récuperer les valeurs des checkbox sélectionnés.

si qqu'un a une suggestion sur la question...

Merci d'avance.

Commentaire de Jackboy le 05/08/2004 16:01:37

est t'il possible de faire un upload par batch (un fichier apres l'autre) avec ce composant ? ex.: download de toutes les images selon un liste

Commentaire de _Thy_ le 06/04/2005 16:31:30

J'ai dû enlever l'include de lui-même dans clsUpFich.asp, et l' Option explicit sur un 2003 server. A part ces deux détails auxquels je m'attendais à la lecture des posts précédents tout fonctionne parfaitement.
Merci Nix, je me voyais mal istaller un composant sur un serveur "sensible" et ces scripts m'enlèvent une fière chandelle du pied :)

Commentaire de aymron le 25/07/2005 12:16:33

"J'ai dû enlever l'include de lui-même dans clsUpFich.asp, et l' Option explicit sur un 2003 server. A part ces deux détails auxquels je m'attendais à la lecture des posts précédents tout fonctionne parfaitement.
Merci Nix, je me voyais mal istaller un composant sur un serveur "sensible" et ces scripts m'enlèvent une fière chandelle du pied :) "

Ben moi, c'est exactement pareil !!!
Vraiment un gros gros merci !!!

Commentaire de chafry le 12/01/2006 16:46:11

Bonjour,
merci pour ce code, ca marche parfaitement

mon pb, j'arrive pas à uploder des gros fichiers ( > 200ko, serveur WIN NT, II5)

je voudrais savoir comment on fait pour uploder des gros fichiers

merci d 'avance

Commentaire de bouba_zyx le 18/03/2006 22:59:11

Pour le pb d'upload pour fichier de taille suppérieur à 200ko voilà un lien qui explique trés bien le pb et comment le corriger, c'est en anglais mais trés simple !

http://www.dmxzone.com/showDetail.asp?TypeId=7&NewsId=5424

Commentaire de mamistitch le 04/05/2006 16:53:56

Merci pour ce code. Exactement ce dont j'avais besoin.
Mais quelle est la raison de l'utilisation de ADODB pour farfouiller dans les données ? Commodité ou nécessité ?
Evidemment, ce serait confortable de pouvoir choisir plusieurs fichiers en une seule fois. Je ne vois aucune différence entre la fenêtre windows qu'ouvre ma messagerie pour choisir DES pièces jointes et celle qu'ouvre "input type=file" qui ne permet pas les choix multiples.

Commentaire de Wyz le 21/11/2006 11:43:06

Code très bien pensé et super pratique. Une petite remarque par contre. Je l'ai utilisé dans un form où j'avais des selects à choix multiples. Or chaque ligne sélectionnée se voit éclatée en binaire (avec le même attribut name) et celà n'a pas été prévu (on ne récupérait que la dernière ligne sélectionnée...).
J'ai donc ajouté une fonction qui cumule si on trouve plusieurs fois le même nom :
    Private Sub AjoutChamp(NomChamp, ValeurChamp)
        dim trouve
        
        trouve = false
    
        For i = 1 To UBound(NomChampTXT)
            If NomChampTXT(i) = NomChamp Then
              trouve = true
              Exit For
            End If
        Next
    
        if trouve then
          ' pas besoin d'ajouter le nom du champ
          LesChampTXT(i) = LesChampTXT(i) & ", " &  ValeurChamp
        
        else
          ' on ajoute le nom du champ et sa valeur
          
          ' nom du champ
          Redim Preserve NomChampTXT(Ubound(NomChampTXT) + 1)
          NomChampTXT(Ubound(NomChampTXT)) = NomChamp
          
          ' valeur du champ
          Redim Preserve LesChampTXT(Ubound(LesChampTXT) + 1)
          LesChampTXT(Ubound(LesChampTXT)) = ValeurChamp
        end if
    End Sub

Et il suffit de remplacer
  AjoutChampNOM = NomInput
  AjoutChampTXT = DonneesDuFichier
par
   AjoutChamp NomInput, DonneesDuFichier

Commentaire de a17249 le 11/10/2007 15:01:11

Le code est super et marche très bien chez moi mais je n'arrive pas à ajouter une fonction qui marche vraiment bien pour stocker le fichier dans une base de données en lieu et place de la sauvegarde sur disque. Quelqu'un pourrait-il m'aider ?? car apparemment, je ne suis pas la seule à avoir ce genre de préoccupation mais je ne trouve aucune réponse valable !
Merci d'avance.

Commentaire de Wyz le 11/10/2007 15:35:32

A17249 > Il suffit de stocker le code binaire du fichier que tu obtiens avec ce script dans un champs de type binaire dans ta base...

Commentaire de a17249 le 11/10/2007 15:54:05

Je me suis créé une petite fonction qui fait ceci :
Public Function Upl2ADONew( NomDuFichier , TailleDuFichier)
'On Error Resume Next
Upl2ADONew = False
Dim MonObjRs
Set MonObjRs = CreateObject("ADODB.Recordset")
Isql ="Select * from upload"
MonObjRs.Open Isql, conn, adOpenKeyset, adLockPessimistic

MonObjRs.AddNew

MonObjRs("Data").AppendChunk VarFichierBin

' MonObjRs("DataBin").AppendChunk VarFichierBin

MonObjRs("SouceFileName") = CheminLocal & NomDuFichier
MonObjRs("Taille") = TailleDuFichier

    MonObjRs("UploadDT") = Now()
MonObjRs.Update


MonObjRs.Close
Set MonObjRs = Nothing

If Err.Number <> 0 Then
Response.Write "Erreur lors de la sauvegarde du fichier en base du/des fichier(s) :<br>" & vbCrLf & Err.Description & "<br>"
Exit Function
End If
Upl2ADONew = True
End Function

Mais ça marche uniquement si c'est un champ destination de type image; or, je voulais le stocker dans un champ de type varbinary.
Pourquoi n'est-ce pas possible ?
Si j'essaie d'écrire dans un champ varbinary, j'obtiens l'erreur :

ADODB.Field error '800a0c93'

L'opération demandée n'est pas autorisée dans ce contexte.

What is the problem ??!!

Commentaire de Wyz le 14/11/2007 13:38:47

AppendChunk ne fonctionne que sur les champs de type ntext ou image (taper AppendChunk dans Google).
Je n'ai par contre pas réussi à restituer le fichier uploadé après avec le code de Nix.
J'ai donc utilisé une autre solution similaire à celle-ci, sauf que le cas de la restitution a été envisagé et fonctionne (je l'ai fait fonctionner) : http://www.pscode.com/vb/scripts/ShowCode.asp?txtCodeId=7361&lngWId=4
Quelques remarques sur cette solution :
* Il faut modifier la méthode FileName dans clsField car des navigateurs comme Firefox ne retournent pas le chemin du fichier
* Je n'ai pas testé pour les listes à choix multiples

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

suppression de caractères dans un champ [ par vegetalain ] Bonjour, voilà, avec votre aide j'ai enfin réussi à charger un fichier texte dans un champ pour modification. Ca marche super bien. SAuf que : le cont Convertir du texte en HTML [ par mariusapo ] Bonjour J'ai du texte formaté dans un fichier resource que je veux afficher dans une vue ,je ne sais pas comment m'y prendre Exemple (dans mon fichie ecrire dans un fichier texte, à l'envers [ par vegetalain ] Salut, j'aimerais écrire dans un fichier texte, à l'envers, avec des formulaires c'est-à-dire :On a le fichier :bill.txtOn écrit dedans "coucou"Quand Ajouter Un Fichier Texte dans une base de données [ par nabil2388 ] Salut!! j'ai créer un fichier txt comment récupérer les données de ce fichier et les afficher dans une list(asp), et ajouter le contenu de ce liste da Demande avis: parser fichier texte dans B.D [ par aminos85 ] Bonjour, Je suis débutant en ASP.NEt et je veux vos avis. J'ai créer un RadioButtonList avec 4 choix. Comment programmer ce RadioButtonList pour que Upload fichier ASP.NET Sous Win 2003 Server [ par gymdev ] [i][b]Bonjour, J'ai un problème en asp.net sur l'upload des fichiers de plus de 4Mb. J'ai déjà augmenter la taille de MaxRequestLength en 20Mb , En Affichage texte et variable base de données suivant la valeur de cette variable [ par lstephan ] Bonjour, Je cherche a afficher ou pas un bloc comprenant du texte ainsi qu 'un champ de recordset (asp access) en fonction de la valeur de ce champ ( Upload ficher "serveur applicatif" --> "Serveur bdd" [ par francy7285 ] Bonjour, mon application crée des fichier et les charge dans les tableaux de la base de données en utilisant de requete sql. Parfois les fichier so conversion d'un fichier texte en son [ par moumoucha ] Salut, SVP, y'a t-il quelqu'un qui peut m'aider à convertir un fichier texte "Bienvenu au groupe" en un son en java. Me recuperer chaque lettre d'un champs de texte separement [ par pad ] bonjour, est ce que l'un d'entre vous aurais une idee pour recupurer depuisun champs de txt dans une page html, chaque lettre qui est tapé et quechaqu


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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 : 1,123 sec (3)

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