C# asp.net文件帮助程序直接将文件写入客户端
我正在使用FileHelpers库进行一个C#.net项目。除了我需要通过点击按钮保存生成的CSV外,一切正常 因此,用户单击一个按钮,就会得到保存文件的提示。我知道Filehelpers有一个WriteStream选项,但他们自己的文档只显示了WriteFile的一个示例。我不知道WriteStream是否是我们需要的,但我认为是的 有人知道是否可以将CSV文件直接保存到客户端而不是服务器硬盘 谢谢 更新更多详细信息: 我将尝试提供更多细节,以帮助澄清我试图实现的目标。我不想在服务器上保存任何文件。我正在使用FileHelpers生成一条记录,我想尝试使用他们的WriteStream方法将该记录作为CSV直接写入他们的浏览器;但奇怪的是,他们提供的例子根本没有使用这种方法 以下是他们方法的链接: 这里是有问题的方法C# asp.net文件帮助程序直接将文件写入客户端,c#,asp.net,filehelpers,C#,Asp.net,Filehelpers,我正在使用FileHelpers库进行一个C#.net项目。除了我需要通过点击按钮保存生成的CSV外,一切正常 因此,用户单击一个按钮,就会得到保存文件的提示。我知道Filehelpers有一个WriteStream选项,但他们自己的文档只显示了WriteFile的一个示例。我不知道WriteStream是否是我们需要的,但我认为是的 有人知道是否可以将CSV文件直接保存到客户端而不是服务器硬盘 谢谢 更新更多详细信息: 我将尝试提供更多细节,以帮助澄清我试图实现的目标。我不想在服务器上保存任何
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);
不要在我上面的第一个示例中使用
Response.Write(csv.ToString())
。不要忘记刷新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;
}
公共内存流CreateCsvFileAsMemoryStream(列表测试项){
var engine=new FileHelperEngine();
var items=testItems.Select(ti=>(TestItemCsvMapping)ti.ToList();
engine.HeaderText=engine.GetFileHeader();
var ms=新内存流();
var sw=新的StreamWriter(毫秒);
引擎写入团队(软件、项目);
sw.Flush();
//var读取器=新的StreamReader(毫秒);
//ms.Position=0;
//Console.Write(reader.ReadToEnd());
ms.Position=0;
返回ms;
}
您可以发布当前保存文件的工作代码吗?这应该不是一个问题,但如果不查看当前代码,就很难确定要执行的操作。如果这是ASP.net
应用程序,那么您希望使用Response对象
以及StreamWriter类
我真的没有任何代码了(在这个阶段已经编写并删除了一千次)。我试图做的是点击按钮,通过浏览器将CSV文件返回给用户。我可以将它保存到服务器上,这没有问题,但是我无法在不保存文件的情况下让Response.TransmitFile()的等效项工作。希望这更清楚。您仍然可以这样做。您需要使用Response
来执行此操作。这里是一个链接,您可以参考它,这是非常直接的更改Response.ContentType=“application/ms excel”代码>至Response.ContentType=“应用程序/文本”
或Response.ContentType=“text/csv”代码>谢谢,我知道如何用你提到的方式给客户写信,但我认为FileHelpers库有一些我可以使用的等价物。也许没有,我需要使用你链接到的流程,但我可以发誓,他们确实提供了相同流程的一些版本。谢谢,我编辑了我的原始问题,以便更清楚地了解我试图实现的目标。