在ASP.NET中,如何让浏览器将字符串内容下载到文件中?(C#)

在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) {

我想创建一个用于从ASP.NET应用程序导出/下载的文本文件,如*.csv。我知道,但我不想在服务器上物理地创建和保存文件。可能吗?
有人做过类似的事情吗?

您还没有保存的文件只是一个字符串变量或内存流。但对于大量数据,您可能不希望将其全部保存在内存中。一旦你有了这个“文件”,你想用它做什么?

当你说“创建一个导出文件”时,我理解你想把它下载到浏览器上。如果是这样的话,这里有一个例子

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也同样适用。