在ASP.NET中,如何让浏览器将字符串内容下载到文件中?(C#)
我想创建一个用于从ASP.NET应用程序导出/下载的文本文件,如*.csv。我知道,但我不想在服务器上物理地创建和保存文件。可能吗?在ASP.NET中,如何让浏览器将字符串内容下载到文件中?(C#),c#,asp.net,file,csv,export,C#,Asp.net,File,Csv,Export,我想创建一个用于从ASP.NET应用程序导出/下载的文本文件,如*.csv。我知道,但我不想在服务器上物理地创建和保存文件。可能吗? 有人做过类似的事情吗?您还没有保存的文件只是一个字符串变量或内存流。但对于大量数据,您可能不希望将其全部保存在内存中。一旦你有了这个“文件”,你想用它做什么?当你说“创建一个导出文件”时,我理解你想把它下载到浏览器上。如果是这样的话,这里有一个例子 public void btnGo_Click (Object sender, EventArgs e) {
有人做过类似的事情吗?您还没有保存的文件只是一个字符串变量或内存流。但对于大量数据,您可能不希望将其全部保存在内存中。一旦你有了这个“文件”,你想用它做什么?当你说“创建一个导出文件”时,我理解你想把它下载到浏览器上。如果是这样的话,这里有一个例子
public void btnGo_Click (Object sender, EventArgs e)
{
Response.Clear();
string fileName= String.Format("data-{0}.csv", DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "filename=" + fileName);
// write string data to Response.OutputStream here
Response.Write("aaa,bbb,ccc\n");
Response.End();
}
引用:您可以直接写入,并设置正确的内容类型和内容处置标题。哦,这还不错。在ASPX页面的页面加载中,执行以下操作:
Response.ContentType = "text/xml";
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Write(/* your text goes here */);
上面是一个例子,如果您的“文件”是xml,但它可以是任何内容,从和excel文件到pdf。您只需更新ContentType即可通过Google或Live进行查找。尝试以下示例:
protected void Button1_Click(object sender, EventArgs e)
{
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "attachment; filename=download.csv");
Response.Write("your,csv,file,contents");
Response.End();
}
您需要考虑编写一个自定义HTTP处理程序(实现
IHttpHandler
)并在web.config中注册它。有关如何设置的示例,请参见
下面是一个基本示例,说明如何实现一个返回一些CSV数据的标记
using System.Web;
public class MyCsvDocumentHandler : IHttpHandler
{
public static string Data
{
get;
set;
}
public MyCsvDocumentHandler()
{
}
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/csv"; // Set the MIME type.
context.Response.Write(Data); // Write the CSV data to the respone stream.
}
public bool IsReusable
{
// To enable pooling, return true here.
// This keeps the handler in memory.
get { return false; }
}
}
这个可能稍微简单一点的替代方法是使用页面。代码几乎是一样的。你能再具体一点吗?您的意思是希望获取字符串并将其保存到客户端上的文件中,而不在服务器上创建文件吗?我假设您打算将其放置在普通的ASPX页面中?当然,这是可行的,但并不是最佳的。在开始时初始化/开始生成ASPX页面将有一些开销。是的,这将在“正常”ASPX页面中进行。不知道你所说的开销是什么意思,或者为什么我这里的东西是次优的。是的,ASHX应该可以很好地完成这项工作。我建议使用一个自定义HTTP处理程序,但在这里两者都能很好地工作。@Cheeso:在输出“真实”数据之前清除响应字符串。ASP.NET做了很多幕后工作,在调用事件处理程序之前加载页面。我明白了!感谢您的澄清。请注意,也可以(如果文档不足)链接IHTTPHandler,而无需咀嚼您的web.config-ASHX“page”类型为您提供连接。(我过去曾使用此技术动态生成图形按钮,我认为它非常有用)。@Tetsujin:是的,绝对如此。在某些情况下,HTTP处理程序(IHttpHandler)更可取,因为它提供了稍微更大的灵活性,但在这种情况下,ASHX也同样适用。