IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Affichage des résultats du sondage: utilité de ce post

Votants
0. Vous ne pouvez pas participer à ce sondage.
  • aucune

    0 0%
  • mal construit

    0 0%
  • utile

    0 0%
  • indispensable

    0 0%
Sondage à choix multiple
4D Discussion :

upload un média image ou video a partir d'un formulaire web


Sujet :

4D

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 21
    Points
    21
    Par défaut upload un média image ou video a partir d'un formulaire web
    Bonjour,

    c'est mon premier post, donc merci de votre indulgence.
    Ayant trouvé qq astuces ici, je retourne le service rendu ...

    Le problème qui m'étais posé et que j'ai eu beaucoup de mal a solutionner.

    Comment, à partir d'un formulaire web html contenant des divers cases a cocher et champs (nom, légende est ceci , est cela ...), récupérer aussi une image ou un média et traiter toutes ces infos en une seule fois?
    voici le code html de la page " formulaire_ajout.html ":
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
    <title>Ma page media</title>
    </head>
    <body bgcolor="#ffffff">
    <div align="center">
    Publier vos photos ou videos
    <form action="/4DACTION/poster_media" method="post" name="poster" enctype="multipart/form-data">
    <p><input type="hidden" name="nom" value="<!--4DVAR nom-->"><input type="hidden" name="login" value="<!--4DVAR login-->"></p>
    <table width="650" border="1" cellpadding="0">
    <tr><td colspan="4">
    <center>
    <table width="505" border="1" bgcolor="white">
    <tr bgcolor="white">
    <td><center><b><font size="3" color="blue">- 1 - Renseignez les cat&eacute;gories du m&eacute;dia</font></b></center></td></tr>
    <tr><td><p>L&eacute;gende <input type="text" name="legende" size="58"></p></td></tr>
    <tr><td><div align="center"><font color="blue"><b>Lieu de ce media</b></font></div></td></tr>
    <tr><td valign="top">
    <p><font size="-1" face="Arial"><input type="checkbox" name="part_est_auto" value="oui" <!--4DVAR vchxart_est_auto-->> En voiture<br>
    <input type="checkbox" name="part_est_avion" value="oui" <!--4DVAR vchxart_est_avion-->> En Avion<br>
    <input type="checkbox" name="part_est_lieu_autre" value="oui" <!--4DVAR vchxart_est_lieu_autre-->> Autre lieu<br></font></p></td></tr>
    <tr bgcolor="white">
    <td valign="top"></td></tr>
    <tr bgcolor="white"><td valign="top" bgcolor="white"><div align="center">
    <b><font size="3" color="blue">- 2 - Ajouter une photo ou vid&eacute;o</font></b>
    <p><input type="file" name="lefichier" size="20"></p>
    <p>derniere photo ajoutee : <!--4DVAR [galeries_media]nom_doc--><br>
    <!--4DVAR [galeries_media]photo--><br>
    </p>
    <p>Pour ne pas reprendre les valeurs pr&eacute;c&eacute;dentes*, cochez cette case <input type="checkbox" name="stopvaleurs" value="oui"></p></div></td></tr></table>
    <p><input type="reset" value="&eacute;ffacer"> <input type="submit" name="submitButtonName"></p>
    <p>Formats accept&eacute;s<br>
    photos : taille maxi 1Mo (1000ko) - JPG,BMP,GIF<br>
    vid&eacute;os : taille maxi 20Mo - RM,MOV,QT,WMV,AVI,MPG.</p>
    </center></td></tr></table>
    </form>
    </div>
    </body>
    </html>

    Les variables d'un formulaires étants toujours au format texte (hélas), la seule solution que j'ai trouvée est de mettre le corp entier dans un blob (en effet, la variable "lefichier" est du texte limité a 32 000 caractères, donc innappropriée pour traiter des médias de + de 32Ko .
    on crée donc la methode "poster_media"
    `--------------------debut méthode poster_media ----------------
    ` Par Marc Longo - mac osx 10.3.9 - 4D 2004.6
    `Date et heure : 10/08/07, 10:23:14
    ` Description
    `upload un fichier image ou vidéo dans 4d à partir d'un formulaire web
    `nota : (filename="" n'apparait qu'au postage d'un "POST multipart/form-data ")
    C_TEXTE(legende; media_est_auto;media_est_avion;media_est_lieu_autre)
    C_TEXTE(nom;login;vchxart_est_auto;vchxart_est_avion;vchxart_est_lieu_autre;stopvaleurs)
    `declarer chaque variable du formulaire en format texte est obligatoire
    CREER ENREGISTREMENT([galeries_media])
    `Il faut déjà traiter les champs classiques :
    [galeries_media]legende:=legende
    si(media_est_auto="oui")
    [galeries_media]est_auto:=vrai
    fin de si
    si(media_est_avion="oui")
    [galeries_media]est_avion:=vrai
    fin de si
    si(media_est_lieu_autre ="oui")
    [galeries_media]est_lieu_autre:=vrai
    fin de si

    `Une fois le corp du formulaire dans un blob il faut :
    ` - recuperer le corp entier dans un blob
    C_BLOB(lecorp)
    LIRE CORPS HTTP(lecorp)
    vtailleblob:=Taille BLOB(lecorp)
    `trouver le nom du fichier posté
    $nomdufichier:=trouve_nom_fichier (lecorp)

    `trouve_nom_fichier est une methode dont voici le code
    `-------------- debut méthode trouve_nom_fichier --------------
    C_BLOB($1)
    C_ENTIER LONG($ffset)
    C_TEXTE(textedublob)
    textedublob:=BLOB vers texte($1;Texte sans longueur ;$ffset;32000)
    posfilename:=Position("filename="+Caractere(34);textedublob)
    textedublob:=Sous chaine(textedublob;posfilename;posfilename+200)
    finpositionfilename:=Position(Caractere(13);textedublob)
    $nomdefichier:=Sous chaine(textedublob;11;finpositionfilename-12)
    **`si c'est un pc avec \
    Si ((Position("\\";$nomdefichier)>0))
    Boucle ($bna;1;10)

    Si ((Position("\\";$nomdefichier)>0))
    posibarre:=Position("\\";$nomdefichier)
    $nomdefichier:=Sous chaine($nomdefichier;posibarre+1)
    Fin de si
    Fin de boucle
    Sinon
    Fin de si
    $0:=$nomdefichier
    `-------------- fin méthode trouve_nom_fichier --------------

    $nomdufichier:=Remplacer chaine($nomdufichier;" ";"-")
    [galeries_media]nom_doc:=$nomdufichier
    BLOB VERS DOCUMENT("blob-brut-"+nomdufichier;lecorp)
    `on peu lire le blob brut qui a été crée

    Au cas ou
    : (Position("image";textedublob)#0)
    $typemedia:="photo"
    Si (vOffset>1000000)
    ALERTE("La taille du fichier image ne doit pas dépasser les 1000Ko (1Mo). Sa taille actue"+"lle est de "+Chaine((vOffset)/1000)+" Ko"+Caractere(13)+"Revenez en arrière avec votre navigateur et rechargez le fichier après avoir rédu"+"it sa taille")
    Fin de si

    : (Position("video";textedublob)#0)*|*(Position("octet-stream";textedublob)#0
    $typemedia:="video"
    Si (vOffset>20000000)
    ALERTE("La taille du fichier image ne doit pas dépasser les 20 000Ko (20Mo). Sa taille ac"+"tue"+"lle est de "+Chaine((vOffset)/1000)+" Ko"+Caractere(13)+"Revenez en arrière avec votre navigateur et rechargez le fichier après avoir rédu"+"it sa taille")
    Fin de si
    Sinon
    $typemedia:="inconu"
    Fin de cas
    `vous avez identifié le type de media et limité sa taille, vous pouvez modifier a souhait ces alertes

    Si ($nomdufichier="")
    ALERTE("Désolé, nous n'avons trouvé aucun fichier dans votre transfert"+Caractere(13))
    Sinon
    `on va maintenant isoler le début du media en éliminant les parties supérieures en examinant le contenu de la variable textedublob
    `(qui est une variable process issue de la méthode trouve_nom_fichier)

    positiondutypemedia:=Position("Content-Type: ";textedublob)
    `on reduit le texte en prenant cette nouvelle base de depart
    textedublob:=Sous chaine(textedublob;positiondutypemedia)
    `on va jusqu'au retour chariot suivant
    positiondebutmedia:=(Position(Caractere(13);textedublob))+3
    `+3 car il y a 2 retours chariots + 1 pour le premier caractere du debut du media
    textedublob:=Sous chaine(textedublob;positiondebutmedia)
    ` la variable textedublob commence maintenant par le debut du fichier media
    chaineachercherdebutmedia:=Sous chaine(textedublob;1;10)
    `on prend les 10 premier caracteres a chercher qui vont servir de référence
    chaineachercherfinmedia:="------------0xKhTmLbOuNdArY"
    `la fin du media est suivie d'informations complémentaires du formulaires web ------------0xKhTmLbOuNdArY (voir le blob brut ecrit sur votre disque)
    `on va donc couper le blob a partir de cette chaine de caracteres

    `Pour trouver les chaines appropriés deans le blob, on va créer une methode que j'ai trouvé sur le web
    `merci au créateur de la methode ZBLOB_FindString

    `---------------debut méthode ZBLOB_FindString -----------------
    **` ----------------------------------------------------
    **` Nom utilisateur (OS) : christophe Keromen
    **` Date et heure : 08/05/04, 08:17:16
    **` ----------------------------------------------------
    **` Methode : ZBLOB_FindString
    **` Description
    **`recherche une chaîne dans un BLOB
    **`d'après p Marty, méthode blb_Search
    **`
    **` Parametres
    **`$1: POINTEUR:BLOB contenant le texte
    **`$2:TEXTE:Texte à chercher
    **`$3:ENTIER:OffSet de départ
    **`$0:ENTIER: Position du texte cherché
    **` ----------------------------------------------------
    **`$pos:=ZBLOB_FindString(->blob;"AChercher";APartirDe)

    C_ENTIER LONG($0;$3;$Start)
    C_POINTEUR($1)
    C_TEXTE($2)

    C_BOOLEEN($_b_siChaineTrouvee)

    $0:=-1**`par défaut non trouvé

    $Start:=$3**`Offset de départ

    C_BLOB($_x_Cible)**`le BLOB à chercher
    $_x_Cible:=$1->

    C_BLOB($_x_A_Chercher)
    TEXTE VERS BLOB($2;$_x_A_Chercher;Texte sans longueur )

    C_ENTIER($_e_LongBlobCible)
    $_e_LongBlobCible:=Taille BLOB($_x_Cible)-1

    C_ENTIER($_e_LongBlobAchercher)
    $_e_LongBlobAchercher:=Taille BLOB($_x_A_Chercher)-1

    **`parcourons le BLOB cible à partir de l'offset de départ

    C_ENTIER($i)
    Boucle ($i;$Start;$_e_LongBlobCible)

    Si ($_x_Cible{$i}=$_x_A_Chercher{0})
    $_b_siChaineTrouvee:=Vrai

    C_ENTIER($ii)
    Boucle ($ii;0;$_e_LongBlobAchercher)
    Si ($_x_Cible{$i+$ii}#$_x_A_Chercher{$ii})
    $_b_siChaineTrouvee:=Faux
    $ii:=$_e_LongBlobCible
    Fin de si
    Fin de boucle

    Fin de si

    Si ($_b_siChaineTrouvee)
    $0:=$i**`la position
    $i:=$_e_LongBlobCible
    Fin de si

    Fin de boucle

    `---------------fin méthode ZBLOB_FindString -----------------

    `on va pouvoir, grace a cette methode, isoler le début et la fin du média
    C_ENTIER($positiondebutmedia;$positionfinmedia)
    $positiondebutmedia:=ZBLOB_FindString (->lecorp;chaineachercherdebutmedia;0)
    $positiondebutmedia:=$positiondebutmedia+1
    $positionfinmedia:=ZBLOB_FindString (->lecorp;chaineachercherfinmedia;$positiondebutmedia)
    C_ENTIER($tailleblobOffset)
    Si ($positiondebutmedia=0)
    `on ne fait rien ou qq chose
    Sinon
    `on copie la partie du blob qui contient le media dans un nouveau blob
    C_BLOB(blobmedia)
    FIXER TAILLE BLOB(blobmedia;0)
    COPIER BLOB(lecorp;blobmedia;$positiondebutmedia;0;$positionfinmedia-($positiondebutmedia))
    Fin de si
    `voila le blob est créé vous pouvez le stocker dans la base et/ou sur le disque

    BLOB VERS DOCUMENT("media-"+nomdufichier; blobmedia)
    au cas ou
    : ($typemedia="photo")
    BLOB VERS IMAGE(blobmedia;[galeries_media]photo)
    : ($typemedia="video")
    [galeries_media]video:= blobmedia `le champ video est un champ de type blob
    fin de cas
    si(stopvaleurs="oui")
    vchxart_est_auto:=""
    vchxart_est_avion:=""
    vchxart_est_lieu_autre:=""
    sinon
    vchxart_est_auto:=" checked"
    vchxart_est_avion:=" checked"
    vchxart_est_lieu_autre:=" checked"
    fin de si
    STOCKER ENREGISTREMENT([galeries_media])
    ENVOYER FICHIER HTML("formulaire_ajout.html")
    Fin de si

    `---------------------fin de la méthode poster_media -----------
    il vous reste l'affichage du dernier media a traiter, si c'est une vidéo ou une photo, ainsi que la taille (vous pouvez créer une vignette dans le champ photo et enregistrez le grand format sur le disque), et mettre une image de bande vidéo si c'est une vidéo ( je n'ais pas encore réussi à créer un aperçu image de la vidéo).
    Voilà, c'est un peu long ou peut-être inhabituel mais ca marche.

    A vous de traiter les informations comme vous l'entendez par la suite,
    ce petit programme vous aidera a créer des base d'annonces avec photos, ou de rencontres ou tout autres utilités.

    Bon boulot à tous

    M.L

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 21
    Points
    21
    Par défaut correction
    petite correction a apporter ;

    remplacer partout " vOffset " par " vtailleblob " .

    M.L

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 22
    Points : 21
    Points
    21
    Par défaut aie correction 2
    Hé bien décidement ... en simplifiant ma méthode j'ai quelques petites erreurs. J'ai donc corrigé et testé intégralement celle-ci,remplacez nomduficher par $nomdufichier et ca marche.

Discussions similaires

  1. creer une video a partir d'une sequence d'images.
    Par KINENVEU dans le forum Programmation multimédia/Jeux
    Réponses: 10
    Dernier message: 17/10/2009, 21h29
  2. [Image] capture des photos à partir d'un video]
    Par GHAZEL Taoufik dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 04/05/2009, 15h50
  3. Upload d'une image a partir d'une servlet
    Par Vincinho dans le forum Servlets/JSP
    Réponses: 15
    Dernier message: 14/04/2009, 11h09
  4. Réponses: 2
    Dernier message: 01/05/2007, 10h42
  5. Uploader une image à partir d'un formulaire ?
    Par netwebzone dans le forum Langage
    Réponses: 2
    Dernier message: 28/11/2005, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo