我可以直接下载 csv 文件而不使用 csvhelper 定义文件路径吗?
Can I download csv file directly without defining a file path using csvhelper?
我想下载创建的 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的路径。
使用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;
您可以 return MemoryStream
作为回应,以下示例只是一个选项,因为我不知道您使用的是什么技术,所以此 webforms 相关代码可能对您有所帮助:
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();
我想下载创建的 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的路径。
使用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;
您可以 return MemoryStream
作为回应,以下示例只是一个选项,因为我不知道您使用的是什么技术,所以此 webforms 相关代码可能对您有所帮助:
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();