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

XMLRAD Discussion :

Proposer un document en téléchargement


Sujet :

XMLRAD

  1. #1
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut Proposer un document en téléchargement
    Je ne sais trop comment m'y prendre....

    Suite à une recherche, je présente un résultat et une liste de documents
    pour les quels je veux donner la possibilité de les télécharger...

    Je sais où se trouve le document sur le serveur, et je voudrais le transmettre côté client, le link direct n'étant bien sur pas possible (question de droits)...

    Pouvez vous me donner une piste ?

    Merci,
    Philippe.

  2. #2
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Points : 2 927
    Points
    2 927
    Par défaut
    as tu le document en accès a partir du serveur Web ?
    en gros, peut ton faire
    http://serveurweb/Docs/Ledocument.pdf

  3. #3
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Donc, je devrais créer un alias (ou répertoire virtuel) dans IIS vers le répertoire de stockage de mes documents téléchargeables ?

    Philippe.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut Download HTTP
    Il serait peut etre possible de proposer en download http le fichier que tes clients veulent downloader.
    Pour cela, il te faut un nouvel XMLService, nommé par exemple SendFile, qui charge le fichier dans un TStream puis l'assigne à la réponse HTTP.

    Voici un exemple de code :

    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
     
    procedure TSendFile.SendFileBeforeXMLService(XMLService: IXMLService; var Handled: Boolean);
    var
      FileName, FileNameStreamed, FileContentType: string;
      Stream: TFileStream;
      MemStream: TMemoryStream;
      FileDate: Integer;
    begin
      if Context.GetValue('FileName') = '' then
        raise EUser.Create('Missing parameter for /SendStream: needs FileName.');
     
      FileName := XMLApplication.AppPath + 'Data\' + Context.GetValue('FileName');
     
      if not FileExists(FileName) then
        raise EUser.Create('There is no file to be streamed.');
      MemStream := TMemoryStream.Create;
      try
        Stream := TFileStream.Create(FileName, fmOpenRead);
        try
          FileDate := FileGetDate(Stream.Handle);
          MemStream.CopyFrom(Stream, Stream.Size);
          MemStream.Seek(0, soFromBeginning);
        finally
          Stream.Free;
        end;
      except
        MemStream.Free;
        raise Exception.Create('An error occured during file copy to memory stream.');
      end;
     
      FileNameStreamed := ExtractFileName(FileName);
      FileContentType := 'application/octet-stream';
      XMLRequest.SetDate(FileDateToDateTime(FileDate));
      XMLRequest.SetContentType(FileContentType);
      XMLRequest.SetCustomHeader('Content-disposition', 'filename=' + FileNameStreamed);
      XMLRequest.SetContentStream(Integer(pointer(MemStream)));
      Handled := True;
     
      // MemStream will be freed by the framework via XMLRequest.
      //Don't free it manually or it will not be sent back to the client
    end;
    Ce code prend du Context la valeur du FileName, et le concatène avec le path de l'application + un répertoire Data. C'est à ce niveau qu'il vous faut intervenir pour indiquer comment récupérer le chemin du fichier. Tu peux par exemple récupérer le chemin du fichier à partir de son ID dans la base de données, avec une requète sql.

    Le fichier est ensuite chargé dans un TFileStream, puis copié dans un TMemoryStream avant d'être assigné à XMLRequest. Attention : il ne faut pas faire de Free de la MemoryStream dans ce gestionnaire d'événement, le Framework s'en chargera.
    Le Handle := True est utilisé pour indiquer au Framework de sauter le reste de l'execution du XMLService (xmlgram, xsl) puisque l'on renvoie nous meme la Réponse HTTP.

    Voila voila

  5. #5
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Merci Nicolas !

    J'ai fait fonctionner cet exemple avec un fichier en dur... Si le fichier est sur un disque réseau, Quels droits d'accès s'appliquent ? ceux de IU* ?

    J'aimerais aussi savoir ce que tu utiliserais dans la dll isapi pour la connexion à la BD :
    TDacDatabase et TDacQuery ?

    Philippe.

  6. #6
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par Ph. B.
    J'ai fait fonctionner cet exemple avec un fichier en dur... Si le fichier est sur un disque réseau, Quels droits d'accès s'appliquent ? ceux de IU* ?
    oui. les droits de IUSR_*.
    J'aimerais aussi savoir ce que tu utiliserais dans la dll isapi pour la connexion à la BD :
    TDacDatabase et TDacQuery ?
    oui toujours TDacDatabase et TDacQuery. c'est aussi ce qui est utilisé en interne dans le framework.

  7. #7
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    J'ai donc un autre souci, c'est que l'accès via le framework se fait sans souci, mais quand je veux implémenter TDacDatabase dans ma dll, je prends l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TDAcDatabase.Open - [DBNETLIB][ Connection.Open(Connect())]. Ce serveur SQL n'existe pas ou son accès est refusé.

  8. #8
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Points : 2 927
    Points
    2 927
    Par défaut
    pourrais-tu donner plus de détail (code, paramètres de connexion, etc) pour que l'on puisse diagnostiquer le problème correctement ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut Acces à la base
    Si tu veux accéder à la base pour récuperer le path du fichier en fonction d'un ID, tu peux aussi utiliser un simple DBExtract dans le XMLGram et déplacer le code du BeforeXMLService vers le AfterXMLGram ou AfterXMLService.

    Le DBExtract remplira le Context avec le chemin du fichier, ce qui t'evitera d'utiliser du code pour le TDacDatabase et le TDacQuery.
    Moins y'a de code, mieux on s'porte

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 284
    Points : 349
    Points
    349
    Par défaut TDacDatabase
    J'en profite aussi pour répondre à la question à propos du TDacDatabase

    Pour configurer ton TDacDatabase, il suffit de nommer le composant comme ta Datasource dans XMLRad : au chargement, le Framework assignera les mêmes paramètres au composant TDacDatabase, en fonction des paramètres de la Datasource.

    Cela permet de modifier dynamiquement, sans recompiler, les paramètres d'un composant TDacDatabase.

    Avec cette technique, si tu as toujours l'erreur, tu pourras la corriger en modifiant les paramètres de ta Datasource et en réessayant, jusqu'à correction

  11. #11
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut
    Merci Nicolas,

    Je teste çà demain....
    Euh plutot aujourd'hui, dans quelques heures au boulot ! ;-)

    Philippe.

  12. #12
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 786
    Points : 5 918
    Points
    5 918
    Par défaut Re: Acces à la base
    Re !

    J' ai fini mes tests et je te remercie encore pour tes conseils.

    Sinon, comme tu le disais si justement ,
    Citation Envoyé par Nicolas.Cogi
    ...Moins y'a de code, mieux on s'porte
    J'ai adopté la solution via le xmlgram, ne réservant les modifications dans la dll qu'au strict nécessaire...

    Il me reste à régler ce pb de connectivité avec un serveur distant (cf. mon autre intervention), et tout sera nickel ! du moins, perfectible mais fonctionnel !

    Philippe.

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

Discussions similaires

  1. [Forum] Proposer un PDF en téléchargement
    Par koedidie dans le forum Débuter
    Réponses: 2
    Dernier message: 29/02/2008, 21h04
  2. [FTP] Proposer un fichier en téléchargement
    Par ataya dans le forum Langage
    Réponses: 5
    Dernier message: 21/11/2007, 14h26
  3. Réponses: 27
    Dernier message: 27/05/2007, 01h19
  4. Proposer un fichier en téléchargement
    Par klemellill dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2006, 01h25

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