Question

J'ai dans mon application Web vb.net une page qui doit transformer une série de données dans un fichier texte, puis la présenter à l'utilisateur pour qu'elle soit téléchargée. Quel est le moyen le plus efficace de créer un tel fichier texte sur un serveur Web .net?

Modifier: pour répondre à une question ci-dessous, il s’agit d’un téléchargement une fois, puis d’un fichier à jeter.

Mise à jour: J'ai collé les suggestions de John Rudy et DavidK, et cela a parfaitement fonctionné. Merci à tous!

Était-ce utile?

La solution

La réponse dépendra de la question de savoir si, comme le mentionne le point-virgule oublié, vous avez besoin de téléchargements répétés ou de mises au rebut uniques.

Dans tous les cas, la clé consiste à définir le type de contenu de la sortie afin de s’assurer qu’une fenêtre de téléchargement est affichée. Le problème avec la sortie de texte simple est que le navigateur essaiera d’afficher les données dans sa propre fenêtre.

La méthode de base pour définir le type de contenu serait similaire à la suivante, en supposant que le texte correspond à la chaîne de sortie et que nom est le nom par défaut pour lequel le fichier doit être enregistré (localement).

HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.ContentType = "application/octet-stream";
response.Charset = "";
response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", filename));
response.Flush();
response.Write(text);
response.End();

Ceci demandera un téléchargement pour l'utilisateur.

Maintenant, il devient plus difficile de sauvegarder littéralement le fichier sur votre serveur Web, mais pas vraiment. Là, vous voudriez écrire le texte dans votre fichier texte en utilisant les classes de System.IO. Assurez-vous que le chemin d'accès en écriture est accessible en écriture pour les utilisateurs du service réseau, IUSR_MachineName et ASPNET Windows. Sinon, même contrat: utilisez le type de contenu et les en-têtes pour assurer le téléchargement.

Je vous recommande de ne pas enregistrer littéralement le fichier, sauf si vous en avez besoin - et même dans ce cas, la technique de le faire directement sur le serveur peut ne pas être la bonne idée. (Par exemple, si vous avez besoin d'un contrôle d'accès pour télécharger ledit fichier? Maintenant, vous devez le faire en dehors de la racine de votre application, ce qui peut ou non être possible en fonction de votre environnement d'hébergement.)

Donc, sans savoir si vous êtes dans un mode de sauvegarde unique ou de fichiers, et sans connaître les implications en termes de sécurité (vous devrez probablement vous y prendre si vous avez vraiment besoin de sauvegardes côté serveur) , c’est à peu près tout ce que je peux vous donner de mieux.

Autres conseils

Utilisez un créateur de chaînes pour créer le texte du fichier, puis envoyez-le à l'utilisateur à l'aide de Content-Disposition.

Exemple trouvé ici: http://www.eggheadcafe.com/community/ aspnet / 17/76432 / use-the-contentdispositi.aspx

private void Button1_Click(object sender, System.EventArgs e)
{
        StringBuilder output = new StringBuilder;
        //populate output with the string content
        String fileName = "textfile.txt";

        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
        Response.WriteFile(output.ToString());

}

Ne le construisez pas du tout, utilisez un HttpHandler et envoyez le fichier texte directement dans le flux de sortie:

http://digitalcolony.com/labels/HttpHandler.aspx

Le bloc de code à mi-chemin est un bon exemple, vous pouvez ajuster le vôtre:

public void ProcessRequest(HttpContext context)
{
   response = context.Response;
   response.ContentType = "text/xml";       
   using (TextWriter textWriter = new StreamWriter(response.OutputStream, System.Text.Encoding.UTF8))
   {
       XmlTextWriter writer = new XmlTextWriter(textWriter);
       writer.Formatting = Formatting.Indented;
       writer.WriteStartDocument();
       writer.WriteStartElement("urlset");
       writer.WriteAttributeString("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
       writer.WriteAttributeString("xsi:schemaLocation", "http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd");
       writer.WriteAttributeString("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");

       // Add Home Page
       writer.WriteStartElement("url");
       writer.WriteElementString("loc", "http://example.com");
       writer.WriteElementString("changefreq", "daily");
       writer.WriteEndElement(); // url

       // Add code Loop here for page nodes
       /*
       {
           writer.WriteStartElement("url");
           writer.WriteElementString("loc", url);
           writer.WriteElementString("changefreq", "monthly");
           writer.WriteEndElement(); // url
       }
       */
       writer.WriteEndElement(); // urlset
   }                      
}

N'oubliez pas qu'il n'est jamais nécessaire que ce soit un "fichier" côté serveur. C'est le client qui le transforme en fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top