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

Web & réseau Delphi Discussion :

Affichage d'images depuis un serveur dedié


Sujet :

Web & réseau Delphi

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Affichage d'images depuis un serveur dedié
    Bonjour,

    Suite à un developpement sous delphi qui me permet de mettre à jour la base mysql de mon site hebergé sur un serveur dedié, je n'arrive pas à faire afficher les photos dans l'objet Tjvimage en procédent de la façon suivante
    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
     
    procedure TForm5.FormShow(Sender: TObject);
     
    var
    image,repertoire,hote:string;
    begin
    if not (IdFTP1.Connected) then Connection;
          if IdFTP1.Connected then
          begin
          IdFTP1.ChangeDir('/www/images-articles/');
          repertoire:=IdFTP1.RetrieveCurrentDir+'/';
          label1.Caption:=repertoire ;
          hote:=IdFTP1.Host;
          label3.Caption:= 'http://'+hote+'/images-articles/'+mydatasource1.DataSet.FieldByName('photo').Text;
          image:=hote+'/images-articles/'+mydatasource1.DataSet.FieldByName('photo').Text;
         JvImage1.Picture.LoadFromFile(image);
     
          end;
     
          end;
    Un message d'erreur m'indique que le chemin est incorrect.Le chemin utilisé par l'objet "JvImage1.Picture.LoadFromFile(image)" se positionne en local sur c:\users\toto\documents\rad studio\projets\http://monsite.fr\images

    Merci d'avance pour votre aide

    Labrande

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    et "c:\users\toto\documents\rad studio\projets\http://monsite.fr\images" est supposé être un chemin valide ?!

    à aucun moment tu ne télécharges le fichier dans le code que tu donnes...
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Le but n'est pas de télécharger l'image, mais de pouvoir l'afficher en local depuis un site distant.
    En fait je rédige des articles avec photos à l'appui.J'utilise donc mon appli en delphi pour alimenter la base de données mysql sur mon serveur dédié, ce qui m'évite de developper une interface admin sur le site pour mettre à jour mes articles.

    Cordialement
    Labrande

  4. #4
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Tu ne pourras le faire sans télécharger l'image.
    Le système de fichier ne gère pas le protocole HTTP, un navigateur par contre oui (cela marchera parce qu'il gère protocole HTTP et qu'il télécharge l'image...).
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par labrande Voir le message
    Bonjour,

    Le but n'est pas de télécharger l'image, mais de pouvoir l'afficher en local depuis un site distant.
    En fait je rédige des articles avec photos à l'appui.J'utilise donc mon appli en delphi pour alimenter la base de données mysql sur mon serveur dédié, ce qui m'évite de developper une interface admin sur le site pour mettre à jour mes articles.

    Cordialement
    Labrande
    j'ai rien compris...quand à afficher localement une image distante...y'a pas le choix, il faut la télécharger, soit sur disque LoadFromFile() soit en mémoire LoadFromStream() avec un TMemoryStream
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Pour récapituler :

    Si je déclare un champ longblob dans ma table mysql et que je stock l'image à l'intérieur, aucun probléme pour afficher l'image depuis l'appli en local en remplacent l'objet JVimage par JvDBImage. Le flux de données est le même sauf erreur de ma part. Donc mis à part un probléme lié au fait que l'objet JVimage considére que l'image est stockée sur le disque en local, le chemin est donc incorrect.

    Si vous avez une idée je suis preneur.

    Cordialement

    Labrande

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 685
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Citation Envoyé par labrande Voir le message
    Si je déclare un champ longblob dans ma table mysql et que je stock l'image à l'intérieur, aucun probléme pour afficher l'image depuis l'appli en local en remplacent l'objet JVimage par JvDBImage.
    Ben oui, mais téléchargement, il y a. C'est la couche "client" de la base de données qui s'en est chargé

    Il n'y a pas d'autre possibilité que ce qui a déjà été proposé !

  8. #8
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Citation Envoyé par labrande Voir le message
    Pour récapituler :

    Si je déclare un champ longblob dans ma table mysql et que je stock l'image à l'intérieur, aucun probléme pour afficher l'image depuis l'appli en local en remplacent l'objet JVimage par JvDBImage. Le flux de données est le même sauf erreur de ma part. Donc mis à part un probléme lié au fait que l'objet JVimage considére que l'image est stockée sur le disque en local, le chemin est donc incorrect.

    Si vous avez une idée je suis preneur.

    Cordialement

    Labrande
    ok, donc pour une BDD tu remplace bien JVImage par JvDBImage ?
    donc pour du HTTP il te faut un JvHTTImage

    sauf que ce composant n'existe pas à ma connaissance, il faut donc le créer ou utiliser une autre méthode...comme par exemple télécharger l'image en local
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  9. #9
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 6
    Points : 4
    Points
    4
    Par défaut La solution
    Voici la solution
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    unit Unit6;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls, DBCtrls,  DB, DBAccess, MyAccess, MemDS,
        Grids, DBGrids,
      Mask,   StdCtrls,
      IdBaseComponent, IdComponent, IdTCPConnection,
      IdTCPClient, IdHTTP, IdAntiFreezeBase, IdAntiFreeze, jpeg, JvDBControls,
      ExtDlgs, IdExplicitTLSClientServerBase, IdFTP
      {$ifdef  ver200}, pngimage, gifimg, JvDBControls{$endif};
      Function LoadImageFromUrl(Const aUrl: String; Const  aImage: TImage): boolean;
     
     
    type
      TForm6 = class(TForm)
        MyConnection1: TMyConnection;
        MyTable1: TMyTable;
        MyDataSource1: TMyDataSource;
        IdHTTP1: TIdHTTP;
        IdAntiFreeze1: TIdAntiFreeze;
        Image1: TImage;
        JvDBNavigator2: TJvDBNavigator;
        DBMemo1: TDBMemo;
        DBEdit1: TDBEdit;
        button1: TButton;
        IdFTP1: TIdFTP;
        Label1: TLabel;
        Label2: TLabel;
        procedure MyDataSource1DataChange(Sender: TObject; Field: TField);
        procedure Connection;
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form6: TForm6;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm6.MyDataSource1DataChange(Sender: TObject; Field: TField);
    var image:string;
    begin
     
     
    image:='http://monsite.fr/images/'+ mytable1.Fields.FieldByName('photo').text;
     
     LoadImageFromUrl('http://monsite.fr/images/'+ (mytable1.Fields.FieldByName('photo').text), image1);
    end;
     
    Function  GetGraphicClass(Const aFileName:  String): TGraphicClass;
    Var aExt: String;
    Begin
      Result := Nil;
      aExt :=  LowerCase(ExtractFileExt(aFileName));
      If  aExt = '.ico' Then
        Result := TIcon
      Else
      If  aExt = '.bmp' Then
        Result := TBitmap
      Else
      If  (aExt = '.jpg') Or  (aExt = '.jpeg') Then
        Result := TJPEGImage
    {$ifdef ver200}
      Else
      If  aExt = '.gif' Then
        Result := TGIFImage
      Else
      If aExt = '.png' Then
        Result := TPNGImage
    {$endif};
    End;
     
    Function LoadImageFromUrl(Const aUrl: String; Const  aImage: TImage): boolean;
    Var
      NewGraphic : TGraphic; 
      GraphicClass : TGraphicClass;
      aStream : TMemoryStream; 
    Begin  
      Result := assigned(aImage);
      If  Result Then 
      Begin  
        GraphicClass := GetGraphicClass(aUrl);
        If GraphicClass = Nil Then  
        Begin 
          Result := False;
          Exit;  
        End; 
        NewGraphic :=  GraphicClass.Create;
        aStream := TMemoryStream.Create; 
        With TIdHTTP.Create(Nil) Do 
        Try
          Try 
            Get(aUrl, aStream);  
            aStream.Seek(0, soFromBeginning);
            NewGraphic.LoadFromStream(aStream); 
          Except 
            Result := False;
          End; 
        Finally  
          aImage.Picture.Graphic := NewGraphic;
          NewGraphic.Free; 
          aStream.Free; 
          Free;
        End;
      End;
    End;
    Cela fonctionne trés bien

    Cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. affichage d'image depuis la base de donnée
    Par tortuegenie dans le forum ASP.NET
    Réponses: 4
    Dernier message: 30/06/2009, 13h23
  2. [MySQL] Affichage d'image depuis ma base
    Par bruce207 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 14/07/2008, 18h57
  3. [MySQL]Affichage d'image depuis une base de données
    Par Sofute dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 20/02/2007, 14h43
  4. Affichage d'images depuis base MySQL
    Par klerdesign dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 25/10/2006, 15h47
  5. Problème d'affichage d'image depuis une pseudo-frames
    Par kriss_87 dans le forum Langage
    Réponses: 2
    Dernier message: 24/05/2006, 22h39

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