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

Réseau/Web Python Discussion :

[Py+HTTP] Ordre de chargement ?


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Par défaut [Py+HTTP] Ordre de chargement ?
    Bonjours à tous.

    J'ai fait un petit serveur web en python.

    Une des parties du serveur me sert à explorer l'arborescence locale. j'ai fait un petit script qui permet de "resizer" les images en miniature (128x128) pour afficher des aperçus des images de manière légère à s'afficher.
    les miniatures se créent bien, et sont stockée dans un dossier tmp.
    le soucis c'est que lorsque je les appel (en boucle dans un tableau html), elles ne s'affiche pas dans le bonne ordre: elle sont décalées.

    par exemple si la l'image1 ne se charge pas dans la case1, alors elle se charge dans la case2 au lieu d'y laisser l'image2, et toutes les images sont décalée par la suite.

    le code commence à prendre un petit peu de place, je vais donc le réduire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    # -*- coding: cp1252 -*-
    from PIL import Image
    import os, time
     
    class Html():
        def __init__(self):
            self.secureuser = "off"
            self.path = 'c:/'
            self.file_path=""
            self.variables = {"var": "init"}
     
        def resized_img(self, filepath):
            size=128,128
            img = Image.open(filepath)
            img.thumbnail(size, Image.ANTIALIAS)
            tmpfile_path = "./tmp/"
            tmpfile_path += os.path.basename(filepath)
            tmpfile_path += ".tmp"
            try:
                img.save(tmpfile_path, "JPEG")
            except:
                img.save(tmpfile_path, "GIF")
            img.close()
            return True
     
        def filetype(self, this_file):
            #retourne le type de fichier
     
        def pages(self, req):       
            if req.count("?") > 0:
                #ici du code qui permet de récupérer les variables GET (self.variables={var:value})
            else:
                page = req
     
            ##Pour voir les dossiers:
            elif page == "/listdir":
     
                if self.variables.has_key("path"):
                    #ici on récupère la variable path (c:/ par default)
     
    #############################################
    ########Préchargement des miniatures#########
    #############################################
     
                for image in os.listdir(self.path):
                    if os.path.isfile(self.path+image):
                        if str(self.filetype(self.path+image)) == "Image":
                            if not os.path.exists("./tmp/"+os.path.basename(self.path+image)+".tmp"):
                                print "Not exist: "+"./tmp/"+os.path.basename(self.path+image)+".tmp"
                                self.resized_img(self.path+image)
                                time.sleep(1)
    #############################################
                result = " "
                #on liste les dossier en premier (osef, ça marche)
                for this_dir in os.listdir(self.path):
                    if os.path.isdir(self.path+this_dir):
                        result+="\t\t<tr><td><a href='/listdir?path="+self.path+this_dir+"'>"+this_dir+"</a></td></tr>\n"
     
                #Ici les fichier (dont les images)    
                for this_file in os.listdir(self.path):
                    if os.path.isfile(self.path+this_file):
                        result+="\t\t<tr><td><a href='/file?path="+self.path+this_file+"'>"+this_file+"</a></td><td>"+str(os.path.getsize(self.path+this_file))+"</td><td>"+str(self.filetype(self.path+this_file))+"</td>"
                        result+="<td>"
                        if str(self.filetype(self.path+this_file)) == "Image":
                            result+="""<img src="file_miniimg_"""+this_file+""""/>"""
                        else:
                            result+="."
                        result+="</td></tr>\n"
                result +="\t</table></td></tr>\n</table>\n"
                result += """<!- -End List Directory -->\n"""
                return result
     
            ##Pour lire la mini-image
            elif "/file_miniimg_" in page:
                imgfile = ("./tmp/"+page[14:len(page)]+".tmp").replace("%20", " ")
                image = open(imgfile, "rb")
                result = image.read()
                image.close()
                return result
    un petit screen pour que vous compreniez mieux mon soucis:

    je tiens a préciser que:
    1]les miniatures sont bien crée avant l'affichage html
    2]la source html est correct, et que les images devraient s'afficher correctement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <tr><td><a href="/file?path=[CHEMIN-ok]/There%20is%20always%20hope.jpg">There is always hope.jpg</a></td> [...] <td><img src="file_miniimg_There%20is%20always%20hope.jpg"></td></tr>
    <tr><td><a href="/file?path=[CHEMIN-ok]/Stonegarden.jpg">Stonegarden.jpg</a> [...] <td><img src="file_miniimg_Stonegarden.jpg"></td></tr>
    Si quelqu'un à une idée pour remedier au problème, se serrait avec plaisir
    Si vous avez besoin d'autres infos, bout de code pour pouvoir m'aider, il suffis de demander
    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Salut

    Je n'ai pas eu le courage de lire ton code, mais de ce que je vois, les images sont à l'endroit voulu.

    Les deux premières ont un souci par contre:
    1. le lien vers l'image semble brisé. Vérifie l'adresse source de l'image.
    2. la deuxième "image" est en fait un fichier windows qui contient des miniatures pour affichage dans un dossier.

    Pourrait-on voir le début de ton tableau HTML ?

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2008
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 317
    Par défaut
    Apparement je me suis mal exprimé:

    Citation Envoyé par Antoine_935 Voir le message
    mais de ce que je vois, les images sont à l'endroit voulu.
    Pas du tout ^^
    la miniature de la ligne "there_is_allways_hope.jpg" est l'image de "Gothic_wallpaper.jpg" et aurait du s'afficher deux case au dessus (a la place de l'image brisée)
    Si tu préfère, l'image "there_is_allways_hope.jpg" c'est celle qui s'affiche sur la ligne en dessous.
    Citation Envoyé par Antoine_935 Voir le message
    le lien vers l'image semble brisé. Vérifie l'adresse source de l'image.
    Pas du tout xD
    le lien fonctionne très bien, d'ailleur si je fais clic-droit et "charger [ou afficher] l'image", elle se charge correctement.
    Citation Envoyé par Antoine_935 Voir le message
    2. la deuxième "image" est en fait un fichier windows qui contient des miniatures pour affichage dans un dossier.
    Ouais ouais, ça je sais, y'a pas de soucis sur cette ligne

    J'en profite pour replacer un screen peut-être plus explicite:

    et le code qui va avec (qui montre bien que NORMALEMENT ça devrait fonctionné, puisque le code source généré est correct):
    **je remplace le chemin par [CHEMIN] pour évider la lourdeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <tbody><tr><td>Nom</td><td>Taille</td><td>Type</td><td>Apercu</td></tr>
    <tr><td><a href="/file?path=[CHEMIN]/logo/tmp/cadna.png">cadna.png</a></td><td>6569</td><td>Image</td><td><img src="file_miniimg_cadna.png"></td></tr>
    <tr><td><a href="/file?path=[CHEMIN]/logo/tmp/aimant.png">aimant.png</a></td><td>5404</td><td>Image</td><td><img src="file_miniimg_aimant.png"></td></tr>
    <tr><td><a href="/file?path=[CHEMIN]/logo/tmp/clee.png">clee.png</a></td><td>5862</td><td>Image</td><td><img src="file_miniimg_clee.png"></td></tr>
    <tr><td><a href="/file?path=[CHEMIN]/logo/tmp/photo.png">photo.png</a></td><td>5928</td><td>Image</td><td><img src="file_miniimg_photo.png"></td></tr>
    <tr><td><a href="/file?path=[CHEMIN]/logo/tmp/brique.png">brique.png</a></td><td>7765</td><td>Image</td><td><img src="file_miniimg_brique.png"></td></tr>
    <tr><td><a href="/file?path=[CHEMIN]/logo/tmp/Thumbs.db">Thumbs.db</a></td><td>8192</td><td>Filetype Not Found</td><td>.</td></tr>
    </tbody>
    1] Tout les liens images (src) fonctionnent (copier/collé manuel des sources)
    2] Si je fais 'clic-droit/charger l'image' sur l'image "brisée" de la ligne du cadna, la miniature du cadna se charge correctement
    3] si je fais 'clic-droit/Afficher l'image' sur la ligne de l'aimant (qui affiche le cadna en miniature), c'est bien l'aimant qui se charge.
    4] Le chargement des images est "aléatoire": les première images peuvent se charger correctement, puis après un F5, elle vont être décalée. en gros, a chaque rafraichissement, les images changent d'ordre, toute seule comme des gran... comme des connes

    Pour moi, c'est python qui soule:
    il doit metre trop longtemps pour lire l'image, et passe à la boucle suivante, comme l'image est chargée a la boucle suivante, il l'affiche au lieu de l'autre, et donc décalle tout le reste.

Discussions similaires

  1. ordre de chargement du fichier settings.xml
    Par menzlitsh dans le forum Maven
    Réponses: 4
    Dernier message: 15/07/2009, 17h41
  2. Réponses: 6
    Dernier message: 28/10/2008, 13h11
  3. Ordre de chargement des librairies
    Par Duc Lebowski dans le forum Weblogic
    Réponses: 1
    Dernier message: 15/01/2008, 17h31
  4. [weblogic 6][ejb]Ordre de chargement des classes
    Par Tistou07 dans le forum Weblogic
    Réponses: 1
    Dernier message: 14/02/2007, 11h14
  5. ordre de chargement de librairies
    Par sidi.elmoctar dans le forum Maven
    Réponses: 3
    Dernier message: 25/08/2006, 21h08

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