Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ASP - Redimensionner Image + Picto après Upload


Information sur le tutorial

Catégorie :Tutoriaux Date de création : 26/08/2008 16:59:54 Vu : 1 551 fois

Note :
Aucune note

Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

Description

But : Proposer aux visiteurs de charger des images sans se soucier du "poids" de l'image, puisqu'on va les redimensionner (et créer des pictos a la volée) pour s'adapter aux dimensions d'affichage final sur notre site.
En effet, les visiteurs peuvent très bien charger des images "haute résolution", très gourmandes en "temps de chargement" et en espace disque.

Intérêts :
1- adapter après "upload" la taille des images à nos besoins
(gain de temps de chargement et d'espace disque).
2- créer des images de prévisualisation (pictos) à la volée.

Principe :
1- on propose au visiteur de mettre une image sur le site, sans contrainte
(images .jpg, .jpeg, .bmp, .png ou .gif)
2- le programme s'occupe de vérifier les dimensions de l'image "uploadée", et les adapte automatiquement.
3- on crée aussi automatiquement un picto.
4- les photos et pictos sont enregistrées dans un dossier
5- leurs noms sont enregistrés dans une base de données, avec un commentaire (légende, par exemple)

Tutorial

Mon tutorial original se trouve ici :
http://www.asp-php.net/tutorial/asp-php/asp-redim-image-upload.php

On a donc besoin :
1- d'une base de données Microsoft Office Access (MABASE),
dans laquelle est créée une table (MATABLE) contenant au moins les champs suivants :
- NUM (NumeroAuto : clé primaire)
- COMMENT1 (Texte)
- PHOTO1 (Texte)
- PICTO1 (Texte)
2- d'un dossier déprotégé (photosMATABLE) (avec les "droits en écriture").

Les fichiers :
1- _connexion.asp : contient les paramètres de connexion à votre base
2- MONFICHIER_LISTE.asp : liste avec options AJOUTER - MODIFIER - SUPPRIMER
3- MONFICHIER_FORM.asp : affiche le formulaire en fonction des 3 options
4- MONFICHIER_TRAITER.asp : traite les 3 options
(options AJOUTER - MODIFIER) :
- traite l'image "uploadée", crée le picto, ajoute les données à la table MATABLE,
- gère les erreurs,
- redimensionne les photo et picto si nécessaire,
- et enregistre les photo et picto dans le dossier photosMATABLE.
(option SUPPRIMER) :
- supprime la fiche concernée de la table MATABLE,
- supprime les photo et picto concernées du dossier photosMATABLE.

Important :
Il faut que les COMPOSANTS ASP suivants soient installés :
1- aspSmartUpload (gratuit) : pour Uploader le formulaire
http://www.aspfr.com/tutoriaux/ASPSMARTUPLOAD-MODE-EMPLOI_847.aspx
2- AspImage (payant) : pour redimensionner puis sauvegarder les images modifiées.
http://www.serverobjects.com/comp/Aspimage.htm
PS : AspImage ne gère pas le redimensionnement des GIF.
Mais d'autres composants (payants aussi) le font.

_connexion.asp

<% ' le dossier DOSSIERBASE doit être déprotégé (avec les "droits en écriture").
' Path long de la base de données
dbPath = Server.MapPath("DOSSIERBASE /MABASE.mdb")
' Création de l'objet permettant la connexion
Set Conn = Server.CreateObject("ADODB.Connection")
' Connexion
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};" _
   & " DBQ=" & dbPath
%>

MONFICHIER_LISTE.asp

dans cet exemple :
- on affiche en ligne les pictos des photos présentes dans la table de la base de données,
- avec pour chacune des boutons "Modifier" et "Supprimer"
- et un bouton "Ajouter Nouveau"

<!-- #include file="_Connexion.asp"-->
<%
' --------------------------------------------------------------------
' Les photos seront stockees dans un dossier photosMATABLE
' on a une base de donnees MABASE avec une table MATABLE
' La table doit contenir au moins les champs suivants :
' - NUM      (NuméroAuto - CLE primaire)
' - COMMENT1 (Texte)
' - PHOTO1   (Texte)
' - PICTO1   (Texte)
' Important : conserver le champ COMMENT1 :
' il est necessaire en mode AJOUTER
' REMARQUE : on peut utiliser ce fichier pour PLUSIEURS TABLES (de meme structure)
' preciser le nom de la table a l'appel du fichier : MONFICHIER.asp?CAT=MATABLE
' --------------------------------------------------------------------
' mettre le nom de la table dans une variable :
   table = "MATABLE"
' ou : table=request.querystring("CAT")
' --------------------------------------------------------------------
' Répertoire des photos et pictos photosMATABLE (déprotégé)
   cheminlong = Server.MapPath(".\photosMATABLE") & "\"
   chemincourt = "photosMATABLE/"
' --------------------------------------------------------------------
' Sélection de toutes les fiches de MATABLE
   URL = Request.ServerVariables("SCRIPT_NAME")
   SQL = "SELECT * FROM " & table & " ORDER BY NUM DESC;"
   Set RS = server.createobject("ADODB.Recordset")
   RS.Open SQL,Conn , 3, 3
%>

<html><head><title></title></head>
<body><div align="center">
<table>
   <tr>
      <td><%=table%></td>
      <td><a href="MONFICHIER_FORM.asp?CAT=<%=table%>&TRAITER=AJOUTER">
         AJOUTER NOUVEAU</a></td>
   </tr>
   <tr>
      <td colspan="2">
   <table>
      <tr>
<% ' tant qu'il y a des fiches
while not RS.eof %>

         <td>
            <table>
            <tr>
               <td>
                  <a href="MONFICHIER_FORM.asp?CAT=<%=table%>&TRAITER=MODIFIER
                                 &NUM=<%=RS.fields("NUM")%>">
                  MODIFIER</a>
               </td>
               <td>
                  <a href="MONFICHIER_FORM.asp?CAT=<%=table%>&TRAITER=SUPPRIMER
                                 &NUM=<%=RS.fields("NUM")%>">
                  Supprimer</a>
               </td>
            </tr>
            <tr>
               <td colspan="2">
                  <% if RS.fields("PICTO1")<> "" then %>
                  <img border="0" src="<%=chemincourt & RS.fields("PICTO1")%>">
                  <% end if %>
               </td>
            </tr>
            </table>
         </td>
<%
RS.MOVENEXT ' fiche suivante
wend
' Fermeture du recordSet
RS.close %>


      </tr>      
   </table>
</td>
</tr>
</table>
</div></body>
</html>
<%Conn.close : Set Conn=nothing%>

MONFICHIER_FORM.asp

dans cet exemple : on affiche
- le bon formulaire en fonction de l'option choisie (ajouter, modifier, supprimer)
- la fiche concernée (photo et commentaire)

<!-- #include file="_Connexion.asp"-->
<%
' --------------------------------------------------------------------
' Répertoire de stockage des images photosMATABLE (déprotégé)
   cheminlong = Server.MapPath(".\photosMATABLE") & "\"
   chemincourt = "photosMATABLE/"
' --------------------------------------------------------------------
' recuperation du nom de la TABLE
   table = request.querystring("CAT")
' recuperation du mode de traitement (AJOUTER - MODIFIER - SUPPRIMER)
   TRAITER = request.querystring("TRAITER")
' --------------------------------------------------------------------
' si MODIFIER ou SUPPRIMER
   if ((TRAITER = "MODIFIER") or (TRAITER = "SUPPRIMER")) then
      ' on recupere aussi le numero de la fiche
      NUM = request.querystring("NUM")
      ' on recupere la fiche pour affichage
      SQL = "SELECT * FROM " & table & " WHERE NUM = " & NUM & ";"
      Set RS = server.createobject("ADODB.Recordset")
      RS.Open SQL,Conn , 3, 3
   end if
' --------------------------------------------------------------------
%>

<html><head><title></title></head>
<body><div align= "center">
<% ' -----------------------------------------------------------------------------------
if (TRAITER = "AJOUTER") then
%>
   
<FORM method="post" ENCTYPE="multipart/form-data" action="MONFICHIER_TRAITER.asp">
   <INPUT type="hidden" name="CAT" value="<%=table%>">
   <INPUT type="hidden" name="TRAITER" value="<%=TRAITER%>">
<table>
<tr>
   <td colspan="3">AJOUTER</td>
</tr>
<tr>
   <td colspan="3">Légende :&nbsp;<INPUT type="text" name="COMMENT1" size="50"></td>
</tr>
<tr>
   <td  colspan="3">PHOTO :&nbsp;<INPUT TYPE=FILE NAME="PHOTO" size="40"></td>
</tr>
<tr>
   <td><a href="#" onclick="history.back()">ANNULER</a></td>
   <td><INPUT type="submit" value="CONFIRMER" name="CONFIRMER"></td>
   <td><INPUT type="reset" value="Rétablir" name="reset"></td>
</tr>
</table>
</FORM>
<%
end if
' --------------------------------------------------------------------------------------
if (TRAITER = "MODIFIER") then
%>
   
<FORM method="post" ENCTYPE="multipart/form-data" action="MONFICHIER_TRAITER.asp">
   <INPUT type="hidden" name="CAT" value="<%=table%>">
   <INPUT type="hidden" name="TRAITER" value="<%=TRAITER%>">
   <INPUT type="hidden" name="NUM" value="<%=NUM%>">
   <INPUT type="hidden" name="PHOTO1avant" value="<%=RS.fields("PHOTO1")%>">
   <INPUT type="hidden" name="PICTO1avant" value="<%=RS.fields("PICTO1")%>">
<table>
<tr>
   <td colspan="3">MODIFIER</td>
</tr>
<tr>
   <td colspan="3">Légende :&nbsp;
      <INPUT type="text" name="COMMENT1" size="50" value="<%=RS.fields("COMMENT1")%>">
   </td>
</tr>
<tr>
   <td colspan="3">
      <% if (RS.fields("PHOTO1") <> "") then %>
      <img border="0" src="<%=chemincourt & RS.fields("PHOTO1")%>">
      <% end if %>
   </td>
</tr>
<tr>
   <td colspan="3">PHOTO :&nbsp;<INPUT TYPE=FILE NAME="PHOTO1" size="40"></td>
</tr>
<tr>
   <td><a href="#" onclick="history.back()">ANNULER</a></td>
   <td><INPUT type="submit" value="CONFIRMER" name="CONFIRMER"></td>
   <td><INPUT type="reset" value="Rétablir" name="B2">
   </td>
</tr>
</table>
</FORM>
<%
end if
' --------------------------------------------------------------------------------------
if (TRAITER = "SUPPRIMER") then
%>
   
<FORM method="post" ENCTYPE="multipart/form-data" action="MONFICHIER_TRAITER.asp">
   <INPUT type="hidden" name="CAT" value="<%=table%>">
   <INPUT type="hidden" name="TRAITER" value="<%=TRAITER%>">
   <INPUT type="hidden" name="NUM" value="<%=NUM%>">
   <INPUT type="hidden" name="PHOTO1avant" value="<%=RS.fields("PHOTO1")%>">
   <INPUT type="hidden" name="PICTO1avant" value="<%=RS.fields("PICTO1")%>">
<table>
<tr>
   <td colspan="3">SUPPRIMER ?</td>
</tr>
<tr>
   <td colspan="3"><%=RS.fields("COMMENT1")%></td>
</tr>
<tr>
   <td colspan="3">
      <% if (RS.fields("PHOTO1") <> "") then %>
      <img border="0" src="<%=chemincourt & RS.fields("PHOTO1")%>">
      <% end if %>
   </td>
</tr>
<tr>
   <td colspan="3">(ATTENTION : toute suppression est définitive !)</td>
</tr>
<tr>
   <td><a href="#" onclick="history.back()">ANNULER</a></td>
   <td><INPUT type="submit" value="CONFIRMER" name="CONFIRMER"></td>
   <td><INPUT type="reset" value="Rétablir" name="B2"></td>
</tr>
</table>
</FORM>
<%
end if
' --------------------------------------------------------------------------------------
%>

</div></body>
</html>
<%Conn.close : Set Conn=nothing%>

MONFICHIER_TRAITER.asp

dans cet exemple :
Restrictions sur les fichiers : jpg/jpeg, gif, png, bmp uniquement et 1024000 octets maxi.

Si "AJOUTER" ou MODIFIER" :
1- TELECHARGER les photos dans le dossier MONDOSSIER/MESIMAGES
- stocker le nom dans les variables PHOTO1 et PICTO1 pour la base de donnees
- PHOTO1 : on enregistre en ajoutant NUM- devant le nom de l'image uploadée
- par défaut, PICTO1 = PHOTO1
(ici NUM est le numero auto -la CLE primaire- de la fiche dans la base de donnees)
(on associe donc l image a la fiche concernee et on rend le nom de l image unique)
(on evite ainsi toute confusion meme si on upload plus tard des images de meme nom)
2- REDIMENSIONNEMENT si nécessaire :
- de la PHOTO ? (on veut ici une largeur maxi de 600 pixels),
- du PICTO ? (on veut ici une largeur maxi de 100 pixels),
dans ce cas, on renomme le PICTO1 = picto-PHOTO1
3- Enregistrement dans la base de données,
4- Suppression des anciennes photos du dossier

Si "SUPPRIMER" :
1- suppression de la fiche dans la base de données,
2- supressions des photos et pictos concernés dans le dossier.

<!-- #include file="_Connexion.asp"-->
<%
   ' Répertoire de stockage des images photosMATABLE (déprotégé)
   cheminlong = Server.MapPath(".\photosMATABLE") & "\"
   chemincourt = "photosMATABLE/"
' -----------------------------------------------------------------
' Pour traiter le formulaire : composant ASPSMARTUPLOAD (gratuit)
' Pour redimensionner ensuite les images : composant ASPIMAGE (payant)
' -----------------------------------------------------------------
' Avec la methode ENCTYPE=multipart/form-data du formulaire
' On ne peut plus recuperer les champs TEXT avec request.form !!
' on les recuperera donc avec aspSmartUpload (.form)
' -----------------------------------------------------------------
   ' Création de l instance des elements du formulaire
   On Error Resume Next
   Set MonUPLOAD = Server.CreateObject("aspSmartUpload.SmartUpload")
   ' restriction sur les fichiers autorises
   MonUPLOAD.AllowedFilesList = "jpg,jpeg,gif,png,bmp"
   MonUPLOAD.DeniedFilesList = "bat,exe,com,asp,php,pdf,txt,doc,xls"
   ' Taille max des fichiers (octets)
   MonUPLOAD.MaxFileSize = 1024000
   ' upload du formulaire
   MonUPLOAD.UpLoad
   ' -------------------------------------------------------------
   ' recuperation du nom de la TABLE
   table = MonUPLOAD.Form("CAT")
   ' recuperation du mode de traitement (AJOUTER - MODIFIER - SUPPRIMER)
   TRAITER = MonUPLOAD.Form("TRAITER")
' --------------------------------------------------------------------------------------
' GESTION DES ERREURS
' --------------------------------------------------------------------------------------
   ' on verifie qu un fichier (photo) a bien ete entre avant de continuer
   fileexiste = 0
   for each file In MonUPLOAD.Files
   if (file.FileName<>"") then
      fileexiste = 1
   end if
   next
   ' -------------------------------------------------------------
   ' on verifie les restrictions des fichiers
if (err AND ((TRAITER = "AJOUTER") or (TRAITER = "MODIFIER"))) then
   ' affichage d'une alerte en cas d erreur et retour au formulaire
   response.write "Erreur ! Vous ne pouvez uploader que des IMAGES (jpg, bmp, png ou gif)<br>"
   response.write "<a href=""#"" onclick=""history.back()"">Retour au formulaire</a>"
   ' -------------------------------------------------------------
elseif (TRAITER = "AJOUTER" and fileexiste = 0) then
   response.write "Erreur ! Pas de fichier IMAGE défini<br>"
   response.write "<a href=""#"" onclick=""history.back()"">Retour au formulaire</a>"
   ' -------------------------------------------------------------
elseif (TRAITER = "MODIFIER" and fileexiste = 0 and MonUPLOAD.Form("PHOTO1avant")="") then
   response.write "Erreur ! Pas de fichier IMAGE défini<br>"
   response.write "<a href=""#"" onclick=""history.back()"">Retour au formulaire</a>"
   ' -------------------------------------------------------------
' si pas d'erreur : traitement
else
' --------------------------------------------------------------------------------------
' TRAITEMENT des champs TEXT (autres que FILE)
' --------------------------------------------------------------------------------------
if (TRAITER = "AJOUTER") then
   ' recuperation des champs TEXT avec aspSmartUpload (.form)
   COMMENT = MonUPLOAD.Form("COMMENT1")
   ' Remplacer les apostrophes par double-apostrophes
   COMMENT = replace(trim(COMMENT),"'","''")
   ' -------------------------------------------------------------
   ' ENREGISTREMENT dans la table par INSERT
   URL = Request.ServerVariables("SCRIPT_NAME")
   listechamps = "COMMENT1"
   listevaleurs = "'" & COMMENT & "'"
   SQL = "INSERT INTO " & table & " (" & listechamps & ") VALUES (" & listevaleurs & ");"
   Conn.Execute(SQL)
   ' -------------------------------------------------------------
   ' recuperation du NUM en selectionnant LA DERNIERE fiche cree
   req_CLE="SELECT MAX(NUM) AS CLEMax FROM MATABLE;"
   set rs_CLE=server.CreateObject("ADODB.recordset")
   rs_CLE.open req_CLE,Conn , 3, 3
   NUM = rs_CLE.fields("CLEMax")
end if
' --------------------------------------------------------------------------------------
if (TRAITER = "MODIFIER") then
   NUM = MonUPLOAD.Form("NUM")
   COMMENT = MonUPLOAD.Form("COMMENT1")
   COMMENT = replace(trim(COMMENT),"'","''")
   ' -------------------------------------------------------------
   ' ENREGISTREMENT dans la table par UPDATE
   URL = Request.ServerVariables("SCRIPT_NAME")
   champs = " COMMENT1='" & COMMENT & "'"
   SQL = "UPDATE " & table & " SET " & champs & " WHERE NUM=" & NUM &";"
   Conn.Execute(SQL)
   ' -------------------------------------------------------------
   ' recuperation du nom des anciennes photos
   PHOTOavant = MonUPLOAD.Form("PHOTO1avant")
   PICTOavant = MonUPLOAD.Form("PICTO1avant")
   ' par defaut
   PHOTO = PHOTOavant
   PICTO = PICTOavant
end if
' --------------------------------------------------------------------------------------
' TRAITEMENT des champs FILE (PHOTOS et PICTOS)
' --------------------------------------------------------------------------------------
if ((TRAITER = "AJOUTER") or (TRAITER = "MODIFIER")) then
   ' TELECHARGER les photos dans le dossier MONDOSSIER/MESIMAGES
   ' et stocker le nom dans les variables PHOTO et PICTO pour la base de donnees
   ' on enregistre en ajoutant NUM- devant le nom de la PHOTO uploadee
   ' ici NUM est le numero auto -la CLE primaire- de la fiche dans la base de donnees
   ' on associe donc l image a la fiche concernee et on rend le nom de l image unique
   ' on evite ainsi toute confusion meme si on upload plus tard des images de meme nom
   ' -------------------------------------------------------------
   ' upload des images avec aspSmartUpload (.Files)
   ' -------------------------------------------------------------
   for each file In MonUPLOAD.Files
   if (file.FileName<>"") then
      PHOTOupload = NUM & "-" & file.FileName
      ' pour eviter tout probleme par la suite, on remplace jpeg par jpg
      if Ucase(file.FileExt)="JPEG" then
         PHOTOupload = replace(PHOTOupload,"JPEG","jpg")
         PHOTOupload = replace(PHOTOupload,"jpeg","jpg")
      end if
      ' on enregistre la PHOTO
      file.SaveAs(cheminlong & PHOTOupload)
      ' -------------------------------------------------------------
      ' reservation des noms pour la BD
      PHOTO = PHOTOupload
      ' par defaut
      PICTO = PHOTO
      ' -------------------------------------------------------------
      ' recuperation de l extension
      decoupe = split(PHOTOupload,".")
      extensionimage = decoupe(ubound(decoupe))
      ' -------------------------------------------------------------
      ' REDIMENSIONNEMENT et SAUVEGARDE de la PHOTO
      ' on utilise ici le composant ASPIMAGE (payant)
      ' (NB : ASPIMAGE ne gere pas le redimensionnement des GIF)
    if InStr("JPEG JPG PNG BMP",Ucase(extensionimage)) then
      ' -------------------------------------------------------------
      ' Création de l instance sur l image
      Set Image = Server.CreateObject("AspImage.Image")
      ' recuperation et chargement de l image
      Image.LoadImage cheminlong & PHOTO
      ' NB : les dimensions de l image sont donnees par :
      ' Image.MaxY (hauteur) et Image.MaxX (largeur)
      ' -------------------------------------------------------------
      ' on souhaite une image finale de W pixels de largeur maxi
      ' ici : 600 pixels de large
      W = 600 
      ' on determine la hauteur finale en proportion
      H = W * Image.MaxY / Image.MaxX
      ' -------------------------------------------------------------
      ' On pourrait tout aussi bien imposer une hauteur donnee :
      ' H = 400
      ' W = H * Image.MaxX / Image.MaxY
      ' -------------------------------------------------------------
      ' REDIMENSIONNEMENT si Image.MaxX est plus grand que W
      ' NB : ResizeR est disponible avec la version 2.0 de AspImage
      ' sinon, utiliser Resize
      ' -------------------------------------------------------------
      if (Image.MaxX > W) then
         ' redimensionnement
         Image.ResizeR W,H
         Image.FileName = cheminlong & PHOTO
        'Sauvegarde de la photo en fonction de l extension
         if (Ucase(extensionimage)="JPG" OR Ucase(extensionimage)="JPEG") then
            Image.ImageFormat=1
         elseif (Ucase(extensionimage)="BMP") then
            Image.ImageFormat=2
         elseif (Ucase(extensionimage)="PNG") then
            Image.ImageFormat=3
         end if
         Image.SaveImage
      end if
      ' -------------------------------------------------------------
      ' REDIMENSIONNEMENT et SAUVEGARDE du PICTO avec AspImage
      ' -------------------------------------------------------------
      Set Image = Server.CreateObject("AspImage.Image")
      Image.LoadImage cheminlong & PICTO
      ' -------------------------------------------------------------
      ' on souhaite un PICTO de 100 pixels de largeur maxi
      W = 100
      H = W * Image.MaxY / Image.MaxX
      if (Image.MaxX > W) then
         Image.ResizeR W,H
         ' ici on enregistre le PICTO avec picto- devant
         PICTO = "picto-" & PICTO
         Image.FileName = cheminlong & PICTO
         if (Ucase(extensionimage)="JPG" OR Ucase(extensionimage)="JPEG") then
            Image.ImageFormat=1
         elseif (Ucase(extensionimage)="BMP") then
            Image.ImageFormat=2
         elseif (Ucase(extensionimage)="PNG") then
            Image.ImageFormat=3
         end if
         Image.SaveImage
      end if
      ' -------------------------------------------------------------
    end if
   end if
   next
   ' -----------------------------------------------------------------
   ' ENREGISTEMENT dans la BASE DE DONNEES
      URL = Request.ServerVariables("SCRIPT_NAME")
      ' update de la table
      champ=""
      champ=champ&" PHOTO1='" & PHOTO & "', "
      champ=champ&" PICTO1='" & PICTO & "' "
      URL = Request.ServerVariables("SCRIPT_NAME")
      SQL = "UPDATE " & table & " SET " & champ & " WHERE NUM=" & NUM & " ;"
      Conn.Execute(SQL)
   ' -----------------------------------------------------------------
   if (TRAITER = "MODIFIER") then
      ' SUPPRESSION des anciennes PHOTOS dans le dossier photosMATABLE
      URL = Request.ServerVariables("SCRIPT_NAME")
      Set FSO = Server.CreateObject("Scripting.FileSystemObject")
      if (PHOTOavant<>"" and PHOTOavant<>PHOTO and PICTOavant<>PICTO) then
         set filePt = FSO.getFile(cheminlong & PHOTOavant) 
         filePt.Delete
      end if
      if (PICTOavant<>"" and PICTOavant<>PICTO and PICTOavant<>PHOTO) then
         set filePt = FSO.getFile(cheminlong & PICTOavant) 
         filePt.Delete
      end if
   end if
   ' -----------------------------------------------------------------
   ' on recupere la fiche pour re-affichage
   SQL = "SELECT * FROM " & table & " WHERE NUM = " & NUM & ";"
   Set RS = server.createobject("ADODB.Recordset")
   RS.Open SQL,Conn , 3, 3
end if
' --------------------------------------------------------------------------------------
if (TRAITER = "SUPPRIMER") then
   ' recuperation des champs avec request.form (formulaire SIMPLE)
   NUM = MonUPLOAD.Form("NUM")
   PHOTOavant = MonUPLOAD.Form("PHOTO1avant")
   PICTOavant = MonUPLOAD.Form("PICTO1avant")
   ' SUPPRESSION de la fiche numero NUM dans la BASE DE DONNEES
   SQLsupprime = "DELETE FROM " & table & " WHERE NUM = " & NUM & ";"
   Conn.Execute(SQLsupprime)
   ' -----------------------------------------------------------------
   ' SUPPRESSION des PHOTOS dans le dossier photosMATABLE
   URL = Request.ServerVariables("SCRIPT_NAME")
   Set FSO = Server.CreateObject("Scripting.FileSystemObject")
   if (PHOTOavant<>"") then
      set filePt = FSO.getFile(cheminlong & PHOTOavant) 
      filePt.Delete
   end if
   if (PICTOavant<>"" and PICTOavant<>PHOTOavant) then
      set filePt = FSO.getFile(cheminlong & PICTOavant) 
      filePt.Delete
   end if
end if
%>

<html><head><title></title></head>
<body><div align="center">
<% ' --------------------------------------------------------------------------------------
if ((TRAITER = "AJOUTER") or (TRAITER = "MODIFIER")) then
%>
   
<table>
<tr>
   <td>
      <% if (TRAITER = "AJOUTER") then %>LA PHOTO a été AJOUTEE.<% end if %>
      <% if (TRAITER = "MODIFIER") then %>LA PHOTO a été MODIFIEE.<% end if %>
   </td>
</tr>
<tr>
   <td><a href="MONFICHIER_LISTE.asp?CAT=<%=table%>">RETOUR</a></td>
</tr>
<tr>
   <td><%=RS.fields("COMMENT1")%></td>
</tr>
<tr>
   <td>
      <% if RS.fields("PHOTO1")<>"" then %>
      <img src="<%=chemincourt & RS.fields("PHOTO1")%>">
      <% end if %>
   </td>
</tr>
</table>
<%
end if
' --------------------------------------------------------------------------------------
if (TRAITER = "SUPPRIMER") then
%>
   
<table>
<tr>
   <td>LA PHOTO a été SUPPRIMEE.</td>
</tr>
<tr>
   <td><a href="MONFICHIER_LISTE.asp?CAT=<%=table%>">RETOUR</a></td>
</tr>
</table>
<%
end if
' --------------------------------------------------------------------------------------
' fin si pas erreur
end if
%>

</div></body></html>
<%Conn.close : Set Conn=nothing%>

Remarques :

Ce tuto est à considérer comme un exercice (néanmoins parfaitement fonctionnel !).

C'est une mise en pratique de différents éléments enseignés dans le tutorial ASP :
- base de données (connexion, affichage, modification, ...)
- formulaire (text + file)
- traitement (upload, gestion d'erreurs, enregistrement, ...)
- image (redimensionnement, ...)
- composants aspsmartupload et aspimage

J'ai surtout cherché à faire des pages CLAIRES, facile à lire :
- avec un maximum d'explications,
- des noms de variables explicites, (cheminlong, PHOTO1avant, ...)
- des paragraphes bien séparés.

Ce qui signifie qu'elles peuvent bien entendu :
- être optimisées et améliorées !
- être adaptées à vos besoins.



Optimisations ?

Utilisation dans un espace d'administration :
http://www.aspfr.com/tutoriaux/ASP-ADMINISTRER-LIGNE-PROTECTION-PAGES_884.aspx

Utilisation par les visiteurs :
On doit d'abord récupérer l'IDvisiteur.
(le visiteur ne doit pas avoir accès à toute la base, mais seulement à ses propres photos !)
- soit il a ses propres tables (ex. IDvisiteur_MATABLE1, ...)
- soit vérifier ses droits d'accès avant ...

Traitement de plusieurs tables :
Déja prévu : le nom de la table étant enregistré dans la variable "table", il est simple de changer de table : Dans le fichier MONFICHIER_LISTE.asp
Au lieu de :
table = MATABLE
On met :
table=request.querystring("CAT")
En précisant à l'appel du fichier :
MONFICHIER_LISTE.asp?CAT=MATABLE

Conditions de redimensionnement :
Dépend surtout du choix de l'affichage final
en ligne ? en colonne ? en tableau ? dans des cases de dimensions fixes ?

Dans le fichier MONFICHIER_TRAITER.asp (traitement)
- redimensionner pour une largeur donnée :

<%
W = 600
H = W * Image.MaxY / Image.MaxX
' ...
Image.ResizeR W,H
%>

- on peut choisir une hauteur donnée :

<%
H = 400
W = H * Image.MaxX / Image.MaxY
' ...
Image.ResizeR W,H
%>

- ou pour tenir dans une case de 600 x 400 max :

<%
W = 600
H = 400
ratiox=Image.MaxX/W ' Ratio en largeur
ratioy=Image.MaxY/H ' Ratio en hauteur
if(ratiox>ratioy) then ' lequel est le plus grand
   ratio=ratiox
else
   ratio=ratioy
end if
' ...
Image.ResizeR Image.MaxX/ratio,Image.MaxY/ratio
%>

Nombre de photos :
On peut gérer la saisie simultanée de plusieurs photos.
Pour les formulaires :
PHOTO1, PHOTO2, ... PHOTOn (et COMMENT1, COMMENT2, ... COMMENTn)
Pour le traitement (adapter aussi pour l'enregistrement dans la BD):

<%
' n est le nombre total de photos
' -----------------------------------------------------
for (i=1;i<=n;i++)
COMMENT = MonUPLOAD.Form("COMMENT"&i)
' ...
PHOTO = MonUPLOAD.Form("PHOTO"&i)
PICTO = MonUPLOAD.Form("PICTO"&i)
' ...
next
' -----------------------------------------------------
i=1
for each file In MonUPLOAD.Files
   if (file.FileName<>"" and i<=n) then
' ...
   ' code pour les photos ...
' ...
   ' idem pour les pictos ...
' ...
i++
next
' -----------------------------------------------------
%>

Redimensionner aussi les GIF ?
Il faut passer par d'autres composants ASP :
par exemple
csASPUpload - csImageFile
ou autres ...

Upload de GROS fichiers (plus de 100Mo) ?
par exemple
www.motobit.com - Huge ASP upload (jusqu'à 2 Go !)
www.motobit.com - Pure ASP upload (version gratuite, jusqu'à 10 Mo)

Aucun commentaire pour le moment.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 0,000 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.