2010-07-29 7 views
3

Actuellement, j'ai le fichier texte va sur le bureau, dans ASP comment puis-je demander une boîte de dialogue de sauvegarde de fichier pour l'utilisateur? Le résultat est une chaîne de StreamReader comme « résultat » comme suit:ASP - Enregistrer la boîte de dialogue de sauvegarde de fichier à partir de streamwriter

StreamWriter FileWriter = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "file.txt")); 

       FileWriter.Write(result); 

       FileWriter.Close(); 
+1

ASP? Rien sur ce que vous faites là-bas va sauver n'importe quoi sur le bureau de l'utilisateur en utilisant un navigateur. Pouvez-vous élaborer davantage sur ce que vous essayez d'accomplir? –

+0

Fondamentalement, où est-ce que je spécifie streamwriter pour enregistrer le fichier et comment puis-je inviter l'utilisateur en utilisant une boîte de dialogue Enregistrer sous pour enregistrer le fichier? Après avoir cliqué sur un lien ou un bouton – user406151

Répondre

5
String FileName = filename; 
String FilePath = filepath; 
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
response.ClearContent(); 
response.Clear(); 
response.ContentType = "text/plain"; 
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 
response.TransmitFile(FilePath + FileName); 
response.Flush(); 
response.End(); 
0

Si je vous comprends bien, vous devez d'abord eu une application 1-niveau (bureau) qui a été la sauvegarde d'un fichier en utilisant C# pour le système de fichiers de l'utilisateur . Vous essayez maintenant de passer à une application à deux niveaux avec votre code C# s'exécutant sur le niveau du serveur, et le navigateur de l'utilisateur représentant l'autre niveau. Il n'y a rien que vous pouvez faire en C# sur le serveur pour écrire un fichier directement dans le système de fichiers de l'utilisateur du navigateur. Cela étant dit, vous devez écrire le fichier dans le flux de réponse HTTP avec un type de contenu similaire à application/octet-stream. Utilisez-vous réellement ASP ou ASP.NET? Si ce dernier, vous devriez avoir accès au flux de réponse par une variété de moyens, mais commencez par l'objet Response (disponible à partir de la page, mais aussi disponible via HttpContext.Current.Response).

2
Response.AppendHeader("Content-Disposition", "attachment"); 
StreamWriter FileWriter = new StreamWriter(Response.OutputStream); 
FileWriter.Write(result); 

Je n'ai pas essayé le code, mais vous avez besoin peut-être d'omettre l'appel à FileWriter.Close() car il va essayer de jeter le flux. Sinon, vous devriez utiliser using à la place. Si c'est trop problématique, écrivez directement au flux avec sa méthode Write ou utilisez un MemoryStream.

2

Un exemple d'une de mes applications qui le fait.

protected void Page_Load(object sender, EventArgs e) 
{ 
    string tempFileName = Request["tempFileName"]; // the temp file to stream 
    string attachFileName = Request["attachFileName"]; // the default name for the attached file 

    System.IO.FileInfo file = new System.IO.FileInfo(Path.GetTempPath() + tempFileName); 
    if (!file.Exists) 
    { 
     pFileNotFound.Visible = true; 
     lblFileName.Text = tempFileName; 
    } 
    else 
    { 
     // clear the current output content from the buffer 
     Response.Clear(); 

     // add the header that specifies the default filename for the 
     // Download/SaveAs dialog 
     Response.AddHeader("Content-Disposition", "attachment; filename=" + attachFileName); 

     // add the header that specifies the file size, so that the browser 
     // can show the download progress 
     Response.AddHeader("Content-Length", file.Length.ToString()); 

     // specify that the response is a stream that cannot be read by the 
     // client and must be downloaded 
     Response.ContentType = "application/octet-stream"; 
     // send the file stream to the client 
     Response.WriteFile(file.FullName); 
    }   
} 
+0

Vous pouvez définir la ligne "Response.ContentType =" application/octet-stream ";' sur le type mime réel du fichier, s'il est connu. –

1
string path = Server.MapPath(your application path); 
WebClient client = new WebClient();    
byte[] data = client.DownloadData(new Uri(path)); 
Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}", "aspnet.pdf")); 
Response.OutputStream.Write(data, 0, data.Length); 

try this code.. its helpful 
1

Je ne sais pas s'il est encore ouvert mais juste pour aider les autres

Il suffit d'utiliser ce code, il doit travailler pour inviter l'utilisateur à ouvrir une boîte de dialogue pour ouvrir ou sauver la fichier sur le système ....

byte[] bytesPDF = System.IO.File.ReadAllBytes(@"C:\sample.pdf"); 

     if (bytesPDF != null) 
     { 

      Response.AddHeader("content-disposition", "attachment;filename= DownloadSample.pdf"); 
      Response.ContentType = "application/octectstream"; 
      Response.BinaryWrite(bytesPDF); 
      Response.End(); 
     } 
Questions connexes