asp.net filehelpers直接将文件写入客户端
本文关键字:文件 客户端 net filehelpers asp | 更新日期: 2023-09-27 18:05:14
我正在为C#.net项目使用FileHelpers库。除了我需要通过点击按钮保存生成的CSV外,一切都正常。
因此,用户单击一个按钮,就会得到保存文件的提示。我知道Filehelpers有一个WriteStream选项,但他们自己的文档只显示了WriteFile的一个例子。我不知道是否需要WriteStream,但我认为是的。
有人知道是否可以将CSV文件直接保存到客户端而不是服务器硬盘上吗?
谢谢。
更新更多详细信息:
我会尽量提供更多的细节来帮助澄清我正在努力实现的目标。我不想在服务器上保存任何文件。我正在使用FileHelpers生成一条记录,我想尝试使用他们的WriteStream方法将该记录作为CSV直接写入他们的浏览器;但奇怪的是,他们提供的例子实际上根本没有使用这种方法。
这是他们方法的链接:
http://www.filehelpers.com/FileHelpers.FileHelperEngine.WriteStream_overload_2.html
这是有问题的方法。
public void WriteStream(
TextWriter writer,
IEnumerable records,
int maxRecords
);
我可以很容易地将文件保存到服务器,但我不想这样做,因为我不需要它,并且希望让客户端直接将其保存到自己的机器上。
可能我必须通过正常的途径才能实现这一点,但我看到了WriteStream方法,并认为FileHelpers可能为实现同样的结果提供了一种干净的方法。
希望这个更清楚。
您应该能够执行以下操作:
Response.ContentType = @"application/x-msdownload";
Response.AppendHeader("content-disposition", "attachment; filename=" + FILE_NAME);
Response.Write(csv.ToString());
Response.Flush();
Response.End();
关于StackOverflow,有很多更详细的建议,比如这个。这取决于你想要实现什么。
编辑
我认为你缺少的步骤是:
MemoryStream stream = new MemoryStream();
StreamWriter streamWriter = new StreamWriter(stream);
engine.WriteStream(streamWriter, records);
stream.Position = 0;
然后你可以使用
StreamReader reader = new StreamReader(stream);
Response.Write(reader.ReadToEnd);
而不是我上面的第一个例子中的CCD_ 1。
不要忘记刷新StreamWriter。参见示例
public MemoryStream CreateCsvFileAsMemoryStream(List<TestItem> testItems) {
var engine = new FileHelperEngine<TestItemCsvMapping>();
var items = testItems.Select(ti => (TestItemCsvMapping)ti).ToList();
engine.HeaderText = engine.GetFileHeader();
var ms = new MemoryStream();
var sw = new StreamWriter(ms);
engine.WriteStream(sw, items);
sw.Flush();
//var reader = new StreamReader(ms);
//ms.Position = 0;
//Console.Write(reader.ReadToEnd());
ms.Position = 0;
return ms;
}