3

我将 FileHelpers 库用于 C# .net 项目。一切正常,除了我需要通过单击按钮来保存生成的 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 可能促进了一种很好的干净方式来实现相同的结果。

希望这更清楚。

4

2 回答 2

2

您应该能够执行以下操作:

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);

而不是Response.Write(csv.ToString())我上面的第一个例子。

于 2013-03-22T15:17:41.170 回答
0

不要忘记刷新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;
    }
于 2017-06-23T07:29:43.120 回答