hig*_*gsy 27 c# asp.net file download
我正在尝试写入内存中的文本文件,然后下载该文件而不将文件保存到硬盘.我正在用它StringWriter来写内容:
StringWriter oStringWriter = new StringWriter();
oStringWriter.Write("This is the content");
Run Code Online (Sandbox Code Playgroud)
我如何下载此文件?
编辑:这是答案的组合,给了我我的解决方案.这里是:
StringWriter oStringWriter = new StringWriter();
oStringWriter.WriteLine("Line 1");
Response.ContentType = "text/plain";
Response.AddHeader("content-disposition", "attachment;filename=" + string.Format("members-{0}.csv",string.Format("{0:ddMMyyyy}",DateTime.Today)));
Response.Clear();
using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.UTF8))
{
writer.Write(oStringWriter.ToString());
}
Response.End();
Run Code Online (Sandbox Code Playgroud)
小智 17
这解决了我:
MemoryStream ms = new MemoryStream();
TextWriter tw = new StreamWriter(ms);
tw.WriteLine("Line 1");
tw.WriteLine("Line 2");
tw.WriteLine("Line 3");
tw.Flush();
byte[] bytes = ms.ToArray();
ms.Close();
Response.Clear();
Response.ContentType = "application/force-download";
Response.AddHeader("content-disposition", "attachment; filename=file.txt");
Response.BinaryWrite(bytes);
Response.End();
Run Code Online (Sandbox Code Playgroud)
Guf*_*ffa 15
您可以直接将数据写入响应流,而不是将数据存储在内存中然后将其发送到响应流:
using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.UTF8)) {
writer.Write("This is the content");
}
Run Code Online (Sandbox Code Playgroud)
该示例使用UTF-8编码,如果您使用其他编码,则应更改该编码.
基本上,您通过实现IHttpHandler接口来创建HttpHandler .在该ProcessRequest方法中,您基本上只需将文本写入context.Response.您还需要添加一个Content-Dispositionhttp标头:
context.Response.AddHeader("Content-Disposition", "attachment; filename=YourFileName.txt");
Run Code Online (Sandbox Code Playgroud)
还记得设置ContentType:
context.Response.ContentType = "text/plain";
Run Code Online (Sandbox Code Playgroud)