Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Outils > XMLRAD
XMLRAD Environnement de développement Web XML/XSL. Avant de poster -> F.A.Q XMLRAD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/02/2003, 13h31   #1
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 456
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 456
Points : 688
Points : 688
Envoyer un message via ICQ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2003, 21h31   #2
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
as tu le document en accès a partir du serveur Web ?
en gros, peut ton faire
http://serveurweb/Docs/Ledocument.pdf
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2003, 10h18   #3
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 456
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 456
Points : 688
Points : 688
Envoyer un message via ICQ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2003, 10h57   #4
Membre éclairé
 
Inscription : janvier 2003
Messages : 284
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 284
Points : 311
Points : 311
Envoyer un message via MSN à Nicolas.Cogi
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 :
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
__________________
Nicolas
Nicolas.Cogi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2003, 15h19   #5
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 456
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 456
Points : 688
Points : 688
Envoyer un message via ICQ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2003, 16h42   #6
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
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_*.
Citation:
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.
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2003, 17h06   #7
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 456
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 456
Points : 688
Points : 688
Envoyer un message via ICQ à Ph. B.
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 :
1
2
 
TDAcDatabase.Open - [DBNETLIB][ Connection.Open(Connect())]. Ce serveur SQL n'existe pas ou son accès est refusé.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2003, 21h43   #8
RDM
Membre Expert
 
Inscription : mars 2002
Messages : 1 426
Détails du profil
Informations forums :
Inscription : mars 2002
Messages : 1 426
Points : 1 546
Points : 1 546
Envoyer un message via ICQ à RDM
pourrais-tu donner plus de détail (code, paramètres de connexion, etc) pour que l'on puisse diagnostiquer le problème correctement ?
__________________
RDM
Tout Est Relatif
Rubrique XMLRAD: http://xmlrad.developpez.com
FAQ XMLRAD: http://xmlrad.developpez.com/faq/
RDM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2003, 15h55   #9
Membre éclairé
 
Inscription : janvier 2003
Messages : 284
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 284
Points : 311
Points : 311
Envoyer un message via MSN à Nicolas.Cogi
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
__________________
Nicolas
Nicolas.Cogi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2003, 16h19   #10
Membre éclairé
 
Inscription : janvier 2003
Messages : 284
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 284
Points : 311
Points : 311
Envoyer un message via MSN à Nicolas.Cogi
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
__________________
Nicolas
Nicolas.Cogi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2003, 01h22   #11
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 456
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 456
Points : 688
Points : 688
Envoyer un message via ICQ à Ph. B.
Merci Nicolas,

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

Philippe.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2003, 10h27   #12
Membre chevronné
 
Philippe
Inscription : avril 2002
Messages : 456
Détails du profil
Informations personnelles :
Nom : Philippe
Localisation : France

Informations forums :
Inscription : avril 2002
Messages : 456
Points : 688
Points : 688
Envoyer un message via ICQ à Ph. B.
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.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h37.


 
 
 
 
Partenaires

Hébergement Web