2017-09-25 7 views
0

Je cherche à permettre à une personne d'exporter des entrées de journal dans un fichier texte. Je peux créer un fichier avec toutes les données, mais en enregistrant strictement le fichier quelque part, je veux permettre à un utilisateur de télécharger et sauvegarder le fichier où il veut sur son ordinateur. Comment puis-je forcer le téléchargement d'un fichier après l'avoir créé avec StreamWriter? J'ai actuellement le code suivant:Comment forcer le téléchargement d'un fichier créé sur un ordinateur d'utilisateur C#

string fileName = "Journal.txt"; 

     using (StreamWriter journalExport = new StreamWriter(fileName)) 
     { 
      foreach (JournalEntryView entry in journalEnteries) 
      { 
       //write each journal entery to file/document 
       journalExport.WriteLine(entry.timestamp + " - " + entry.author + " (" + entry.authorRole + ")"); 
       journalExport.WriteLine(entry.text); 
       journalExport.WriteLine(""); 
       journalExport.WriteLine(""); 
      } 
     } 

Je tente aussi de mettre cela en un ActionResult et retourner le dossier.

EDIT: Le code suivant est mon nouveau code actuel et la direction que je suis à la recherche d'aller, mais quand j'utilise un ActionLink pour appeler cette méthode, je viens d'être redirigé vers une nouvelle page plutôt que de télécharger la fichier.

string fileName = "Journal.txt"; 
     string filepath = ConfigurationManager.AppSettings["DocumentRoot"] + "\\" + id + "\\" + fileName; 

     using (StreamWriter journalExport = new StreamWriter(filepath)) 
     { 
      foreach (JournalEntryView entry in journalEnteries) 
      { 
       //write each journal entery to file/document 
       journalExport.WriteLine(entry.timestamp + " - " + entry.author + " (" + entry.authorRole + ")"); 
       journalExport.WriteLine(entry.text); 
       journalExport.WriteLine(""); 
       journalExport.WriteLine(""); 
      } 

     } 

     byte[] fileData = System.IO.File.ReadAllBytes(filepath); 
     string contentType = MimeMapping.GetMimeMapping(filepath); 

     var cd = new System.Net.Mime.ContentDisposition 
     { 
      FileName = fileName, 
      Inline = true, 
     }; 

     Response.AppendHeader("Content-Disposition", cd.ToString()); 

     return File(fileData, contentType); 
+1

Est-ce que vous regardez 'FileContentResult' et la méthode' Fichier() '? – SLaks

+0

J'ai mais je ne suis pas sûr de savoir comment les utiliser pour accomplir mes besoins –

Répondre

0

Cela pourrait être ce que vous cherchez:

public ActionResult GetFile() 
{ 
    ...processing stuff... 
    return File("/files/file.pdf", "application/pdf"); 
    //or 
    return File("/files/file.pdf", "application/force-download", "donwloadname.pdf"); 
} 
+0

d'où vient "files/file.pdf" et "downloadname.pdf"? –

+0

Vous pouvez voir les paramètres que la méthode 'File' permet, mais dans mon exemple" /files/files.pdf "est le chemin vers le pdf et" downloadname.pdf "est le nom que vous voulez donner le pdf lorsque l'utilisateur télécharge le fichier. Comme je ne connais pas votre architecture, les valeurs devront être personnalisées pour votre application. –

+0

cela redirige encore mon à une nouvelle page contenant les données du fichier, mais ne pas forcer l'utilisateur un téléchargement du fichier. –