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

Delphi .NET Discussion :

Téléchargement de fichier xml


Sujet :

Delphi .NET

  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Par défaut Téléchargement de fichier xml
    Bonjour,

    Je développe actuellement avec DELPHI.NET.
    Dans mon application web, je génère un fichier xml à partir d'un dataset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DS.WriteXml('c:\monfichier.xml');
    cela à partir d'une page : mapage.aspx.
    Et maintenant lors du clic sur un bouton dans mapage.aspx, je voudrais que le navigateur propose le téléchargement de monfichier.xml, j'écris donc le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    response.clear();
    response.contentType := 'application/octet-stream; name="monfichier.xml";
    response.addHeader('Content-Disposition','attachment; filename="monfichier.xml"');
    response.flush();
    Là, le navigateur me propose bien de télécharger un fichier mais c'est mapage.aspx que je télécharge ?
    Quelqu'un saurait d'où viens ce problème ? Existe-t-il une solution plus simple ?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Par défaut
    Et c'est quand que tu l'envoies le fichier ?
    Il ne suffit pas de mettre les bons headers, il faut aussi transmettre le fichier...

  3. #3
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 539
    Billets dans le blog
    10
    Par défaut
    Voilà peut être une réponse :
    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
     
    procedure TWebForm1.Button1_Click(sender: System.Object; e: System.EventArgs) ;
    var
       FileToDownload : string;
    begin
       FileToDownload := 'c:\ServerTest.txt'; //make sure this exists!!!
       DownloadFile(FileToDownload,'LocalTest.txt') ;
    end;
     
    Here's the DownloadFile function (make sure you add the System.IO to the uses list in your code-behind, or the unit where DownloadFile is defined): 
    procedure DownloadFile(const FilePath : String; const FileName : String =''; const ContentType : String = '') ;
       type
         TStringArray = array of string;
       var
         DownloadFileName : string;
         fi : FileInfo;
         StartPos, FileSize, EndPos : System.Int64;
         Range : string;
         StartEnd : TStringArray;
       begin
         If Not System.IO.File.Exists(FilePath) Then Exit;
         StartPos := 0;
         fi := FileInfo.Create(FilePath) ;
         FileSize := fi.Length;
         EndPos := FileSize;
         HttpContext.Current.Response.Clear() ;
         HttpContext.Current.Response.ClearHeaders() ;
         HttpContext.Current.Response.ClearContent() ;
         Range := HttpContext.Current.Request.Headers['Range'];
         If Assigned(Range) AND (Range <> '') Then
         Begin
           StartEnd := Range.Substring(Range.LastIndexOf('=') + 1).Split(['-']) ;
           If Not (StartEnd[0] = '') Then
             StartPos := Convert.ToInt64(StartEnd[0]) ;
         End;
         If (System.Array(StartEnd).GetUpperBound(0) >= 1) And (Not (StartEnd[1] = '')) Then
           EndPos := Convert.ToInt64(StartEnd[0])
         Else
           EndPos := FileSize - StartPos;
         If EndPos > FileSize Then EndPos := FileSize - StartPos;
         HttpContext.Current.Response.StatusCode := 206;
         HttpContext.Current.Response.StatusDescription := 'Partial Content';
         HttpContext.Current.Response.AppendHeader('Content-Range', 'bytes ' + StartPos.ToString + '-' + EndPos.ToString + '/' + FileSize.ToString) ;
       If Not (ContentType = '') And (StartPos = 0) Then
       Begin
         HttpContext.Current.Response.ContentType := ContentType;
       End;
       If FileName = '' Then
         DownloadFileName := fi.Name
       else
         DownloadFileName := FileName;
       HttpContext.Current.Response.AppendHeader('Content-disposition', 'attachment; filename=' + DownloadFileName) ;
       HttpContext.Current.Response.WriteFile(FilePath, StartPos, EndPos) ;
       HttpContext.Current.Response.&End;
    End; (*DownloadFile*)

  4. #4
    Membre Expert
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Par défaut
    C'est marrant la différence de taille entre le code qui ne fait rien et celui qui envoi réellement le fichier

    Ce code est correct, juste un reproche qu'on peut lui faire c'est sur le contenttype, il n'offre pas d'aide (juste une paramètre par défaut à vide dans la fonction). Il faut donc penser à mettre un type mime reconnu pour que ça marche bien sur tous les navigateurs et pas se contenter du paramètre à vide.

Discussions similaires

  1. Téléchargement automatique de fichier XML
    Par webshop2 dans le forum ASP
    Réponses: 0
    Dernier message: 04/09/2013, 10h19
  2. Téléchargement de fichiers XML depuis un URL http
    Par jockhip12 dans le forum Langage
    Réponses: 2
    Dernier message: 28/05/2012, 11h51
  3. Téléchargement de fichier XML
    Par kangouroub dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 04/07/2011, 10h20
  4. [SOAP][XML][C#.NET] Téléchargement de fichiers XML
    Par juniorAl dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 27/06/2005, 09h35
  5. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29

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