asp.net filehelpers直接将文件写入客户端

时间:2013-03-22 15:04:31

标签: c# asp.net filehelpers

我正在将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可以为实现相同结果提供一种很好的清洁方式。

希望这更清楚。

2 个答案:

答案 0 :(得分:2)

您应该可以执行以下操作:

Response.ContentType = @"application/x-msdownload";
Response.AppendHeader("content-disposition", "attachment; filename=" + FILE_NAME);

Response.Write(csv.ToString());
Response.Flush();
Response.End();

StackOverflow上有许多更精细的建议,例如this one。这取决于你想要实现的目标。

修改

我认为您缺少的步骤是:

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

答案 1 :(得分: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;
    }