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可能为实现同样的结果提供了一种干净的方法。

希望这个更清楚。

asp.net 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;
    }