【问题标题】:Can I download csv file directly without defining a file path using csvhelper?我可以直接下载 csv 文件而不使用 csvhelper 定义文件路径吗?
【发布时间】:2020-10-21 12:45:56
【问题描述】:

我想下载创建的 CSV 文件而不将其保存在预定义的路径中。我正在使用 CSVHelper 库。 (网站不是基于 MVC 的)。以下是我现在使用的代码。

        using (var writer = new StreamWriter("path\\to\\file.csv"))
        using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
        using (var CHAIN = dt)
        {
            
            foreach (DataColumn column in CHAIN.Columns)
            {
                csv.WriteField(column.ColumnName);
            }
            csv.NextRecord();

          
            foreach (DataRow row in CHAIN.Rows)
            {
                for (var i = 0; i < CHAIN.Columns.Count; i++)
                {
                    csv.WriteField(row[i]);
                }
                csv.NextRecord();
            }
        }

但我需要将 csv 文件直接下载到浏览器中,而不需要从 StreamWriter 定义路径。

【问题讨论】:

  • 这能回答你的问题吗? Using CSVHelper to output stream to browser
  • 其实这个网站不是基于MVC的。以上问题解决了基于 MVC 的网站
  • 请使用代码 sn-p 发布问题。
  • @DilipD 我已经添加了代码 sn-p
  • 好,现在清除

标签: c# asp.net csv csvhelper


【解决方案1】:

使用MemoryStream 这应该是可能的:

var memoryStream = new MemoryStream();
using (var writer = new StreamWriter(memoryStream)) {
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    using (var CHAIN = dt)
    {
    
        foreach (DataColumn column in CHAIN.Columns)
        {
            csv.WriteField(column.ColumnName);
        }
        csv.NextRecord();

  
        foreach (DataRow row in CHAIN.Rows)
        {
            for (var i = 0; i < CHAIN.Columns.Count; i++)
            {
                csv.WriteField(row[i]);
            }
            csv.NextRecord();
        }
    }
    writer.Flush();
}

memoryStream.Seek(0, SeekOrigin.Begin);
var resultInBytes = memoryStream.ToArray();
memoryStream.Close();
return resultInBytes;

您可以返回MemoryStream 作为响应,以下示例只是一个选项,因为我不知道您使用的是什么技术,所以这个与网络表单相关的代码可能会对您有所帮助:

Response.Clear();
Response.ContentType = "text/csv"; // or application/force-download
Response.AddHeader("content-disposition", "attachment;    filename=name_you_file.csv");
Response.BinaryWrite(resultInBytes);
Response.End();

【讨论】:

    猜你喜欢
    • 2020-10-13
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2011-08-03
    • 2023-03-18
    • 2023-01-11
    相关资源
    最近更新 更多