2009-12-10 5 views
0

J'ai une grande application de formulaire Web que je veux permettre à l'utilisateur d'exporter leurs données au cas où ils ne veulent pas remplir le formulaire entier en une seule fois. Puis, quand ils reviennent, ils peuvent importer les données et continuer là où ils l'ont laissé.Transmettre le fichier XML généré sans enregistrer sur le disque

La raison pour laquelle cela fait partie de l'exigence pour le client est qu'aucune base de données ne doit être utilisée. Je suis arrivé au point où je crée un fichier XML contenant toutes les données de formulaire, mais je veux que le client puisse télécharger ce fichier XML sans que l'application doive l'enregistrer sur le serveur, même temporairement.

Est-il possible de créer le fichier XML et de le transmettre via un flux/une pièce jointe au client sans l'enregistrer sur le disque?

Je suis en utilisant C# Asp.net

Répondre

2

Vous pouvez écrire au HttpResponse:

 HttpResponse response = HttpContext.Current.Response; 

     string xmlString = "<xml>blah</xml>"; 
     string fileName = "ExportedForm.xml"; 

     response.StatusCode = 200; 

     response.AddHeader("content-disposition", "attachment; filename=" + fileName); 
     response.AddHeader("Content-Transfer-Encoding", "binary"); 
     response.AddHeader("Content-Length", _Buffer.Length.ToString()); 

     response.ContentType = "application-download"; 
     response.Write(xmlString); 
+0

Notez que j'utilise spécifiquement un ContentType de "téléchargement d'application" plutôt qu'un type mime plus précis "application/xml" ou "text/xml". C'est pour surmonter un problème dans IE6 où le nom de fichier dans l'en-tête "content-disposition" n'est pas utilisé pour le nom de fichier "Save As" par défaut. –

+0

A travaillé comme un charme. Merci! – TruthStands

0

oui. En PHP, il ressemble à ceci:

header("Content-type: text/xml"); 
$headerText = "Content-disposition: attachment; filename=file.xml"; 
header($headerText); 
echo $your_XML_contents; 
exit; 
+0

Oops, j'ai oublié de mentionner que je suis en utilisant C# Asp.net – TruthStands

+0

ensuite accorder plus d'attention aux commentaires de mlsteeves, même chose mais son est la langue -agnostic: D – tloach

2

Vous ne mentionnez pas ce que la technologie serveur que vous utilisez, mais en général:

  1. Créez votre document XML en mémoire, et l'écrire à votre réponse courant.
  2. Modifier le type de contenu en-tête à text/xml
  3. Modifier l'en-tête Content-disposition à attachment; filename=data.xml;

Quelques liens: http://en.wikipedia.org/wiki/MIME#Content-Disposition

1
HttpResponse response = HttpContext.Current.Response; 

    string xmlString = "<xml>blah</xml>"; 
    string fileName = "ExportedForm.xml"; 

    response.StatusCode = 200; 

    response.AddHeader("content-disposition", "attachment; 

filename = "+ nomFichier"; response.AddHeader ("Content-Transfer-Encoding", "binaire"); response.AddHeader ("Content-Length", _Buffer.Length.ToString());

response.ContentType = "application-download"; 
    response.Write(xmlString); 

Mais il enregistre tout le contenu de la page de fichier

+1

J'ai résolu cela. Mais maintenant j'ai un problème avec les symboles nationaux. Comment définir l'encodage en réponse? – Alexander

+1

Résolu aussi. Réponse.ContentEncoding = System.Text.Encoding.GetEncoding ("windows-1257"); – Alexander

Questions connexes