UpLoad de fichiers et Base de Données

  • Par: jack
  • Le: 27.02.2009 16:40:51
  • Dans: PHP
Pour uploader un fichier on passe toujours par le biais de composants externes qu'il est nécessaire d'avoir installés sur son serveur, les plus connus sont :

SA-FileUp (www.softartisans.com/softartisans/saf.html commercial)
SmartUpload (www.aspsmart.com/fr/ gratuit).
Pour pouvoir uploader un fichier sur votre serveur, vous devez avoir un répertoire déprotégé, donc avec l'accès en lecture/écriture (rép "upload" pour notre exemple).
Commençons par créer ce formulaire qui sera remplir par l'utilisateur :

Code formulaire

<form name="form1" method="post" action="pageupl2.asp"
   enctype="multipart/form-data">
   <table width="95%" border="0" cellspacing="5">
       <tr>
          <td width="45%">Pseudo :</td>
          <td width="55%"><input type="text" name="pseudo"></td>
       </tr><tr>
          <td width="45%">Age :</td>
          <td width="55%"><input type="text" name="age"></td>
       </tr><tr>
          <td width="45%">Site Web :</td>
          <td width="55%">
             <input type="text" name="site" value="http://"></td>
       </tr><tr>
          <td width="45%">Fichier :</td>
          <td width="55%">&lt;input type="file" name="fichier"></td>
       </tr><tr>
          <td width="45%"></td>
          <td width="55%">
             <input type="submit" name="Submit" value="  Valider  ">
          </td>
       </tr>
    </table>
</form>
Il y a quelque chose de très important dans ce formulaire, il s’agit de  la ligne magique enctype="multipart/form-data".
Passons à l'enregistrement du fichier : (La table TUsers comprends ici 5 champs : Id, Pseudo, Age, Site, Photo)
1. Enregistrer le fichier :

<% ' script de connection à la base non inclu
Set Upl = Server.CreateObject("SoftArtisans.FileUp")
' on instancie Upl, l'objet d'upload, ici SA-FileUp 
NomFichier = Mid(upl.UserFilename, InstrRev(upl.UserFilename, "\") + 1)
' on ne garde que le nom de fichier
SQL = "SELECT * FROM TUsers order by Id DESC"
RS.open SQL,Conn,2,3
' on ouvre sa table
RS.addnew
RS("Pseudo") = ObjUpl.Form("Pseudo")
RS("Age") = ObjUpl.Form("Age")
RS("Site") = ObjUpl.Form("Site")
RS("Photo") = NomFichier
RS.update
' on crée un nouvel enregistrement avec dans le champs "Photo", le nom court du fichier+extension
Upl.form("fichier").SaveAs Server.MapPath(".") & "\upload\" & RS("photo") 
Response.Write "Le fichier " & NomFichier & " a été sauvegardé."
' on enregistre le fichier venant du champs "fichier" du formulaire dans le sous-répertoire upload
' (rép déprotégé) du chemin actuel, sous son nom d'origine
RS.Requery
' on réexécute la requête pour prendre en compte cet ajout  
%>

2. On ressort les fichiers :

<table border="0" cellspacing="5">
   <% ' on boucle sur tous les enregistrement de la base
   while not RS.EOF %>
   <tr>
      <td>
         <img src="/asp/upload/<%=RS("photo")%>" border="0">
         <!-- on ressort l'image qui se trouve donc dans le rep "Upload",
            on ressort son nom de fichier de la base -->
      </td><td nowrap>
         Pseudo : <%=RS("Pseudo")%><br>
         Age : <%=RS("Age")%><br>
         Site web : <a href="<%=RS("Site")%>"
            target="_blank"><%=RS("Site")%></a>
      </td>
   </tr>
   <% ' on sort toutes les autres informations et on boucle
   RS.movenext()
   wend %>  
</table>

Les autres commandes utiles du composant SA-FileUp :

<%=upl.TotalBytes%> : Nombre total d'octets transférés
<% upl.MaxBytes = 65535 %> : Nombre d'octets max pour le transfert, ici 64ko
<%=upl.ContentType%> : Récupère le type MIME du fichier envoyé, on peut ensuite le comparer via :
<% Select Case LCase(TypeFichier) ' On récupère le type du fichier 
   Case "image/jpeg"  
      Response.Write "Le fichier " & NomFichier & " a été sauvegardé." ' si jpeg, alors on enregistre
   Case else   
      upl.delete ' sinon on efface le fichier
      Response.Write "Le fichier " & NomFichier & " a été effacé."
End Select %>

Quelques types MIME : image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*

Enregistrer plusieurs fichiers en même temps :

<% upl.FormEx("fichier1").SaveAs Server.MapPath(".") & "\upload\" & RS("photo1") %>
<% upl.FormEx("fichier2").SaveAs Server.MapPath(".") & "\upload\" & RS("photo2") %>