使用asp.net中的csv文件进行响应
我试图从一个文本框中创建一个csv文件,然后将其发送给用户。这是我目前的代码:使用asp.net中的csv文件进行响应,asp.net,file,csv,response,Asp.net,File,Csv,Response,我试图从一个文本框中创建一个csv文件,然后将其发送给用户。这是我目前的代码: Response.Clear(); Response.ContentType = "text/csv"; Response.AppendHeader("Content-Disposition", string.Format("attachment; filename={0}", DateTime.Now)); R
Response.Clear();
Response.ContentType = "text/csv";
Response.AppendHeader("Content-Disposition",
string.Format("attachment; filename={0}", DateTime.Now));
Response.Write(TextBox_Data.Text);
Context.Response.End();
发送的是一个空xml文件,我以前从未尝试过用文件响应,我想知道它为什么会这样做
我还尝试了以下不起作用的方法:
var writer = File.CreateText("C:\\file.csv");
writer.WriteLine(TextBox_Data.Text);
Context.Response.Clear();
Context.Response.AppendHeader("content-disposition", "attachment; filename=" + DateTime.Now + ".csv");
Context.Response.ContentType = "text/csv";
Context.Response.Write("C:\\file.csv");
Context.Response.Flush();
Context.Response.End();
如果您有答案,请告诉我:)以下代码适用于我。您可能只是缺少一个文件扩展名
Response.Clear();
Response.ContentType = "text/csv";
Response.AppendHeader("Content-Disposition",
string.Format("attachment; filename={0}.csv", DateTime.Now));
Response.Write(TextBox_Data.Text);
Context.Response.End();
只是对joshb关于Response.End()用法的回答的补充: MSDN在非错误情况下使用
Response.End()
,在某些情况下,它实际上会导致客户端丢失一些数据
在我的例子中,有时下载的csv会丢失最后一行的最后字节,因此我删除了Response.End()
,并使用
HttpContext.Current.ApplicationInstance.CompleteRequest()
相反,我必须重写页面的Render(HtmlTextWriter)
方法,以不对请求写入任何内容,因为csv已经写入
public class PageBase : Page
{
private bool performRegularPageRender = true;
protected override void Render(HtmlTextWriter writer)
{
if (performRegularPageRender)
base.Render(writer);
}
public void SkipRegularPageRendering()
{
performRegularPageRender = false;
}
}
更多信息/学分:
; ; 您正在尝试根据用户在文本框中输入的内容创建CSV文件,然后通过电子邮件发送给用户,或者让用户自动下载?除了这段代码,你能给我们提供更多关于如何和为什么的上下文吗?试着用另一条路径写。也许是你的个人资料路径。写入根目录是危险的。事实上,我正试图从多行文本框中创建一个可下载的CSV文件:)事实上,我不在乎将文件放在我的驱动器上,我只想要一个可下载的CSV文件,带有文本框中的文本。写入根目录不仅危险,但是,除非您明确授予应用程序池标识这样做的权限,否则它将因安全原因而失败。另一方面,datetime的tostring()会创建一个带有空格的字符串。空格会使文件丢失其类型(也会丢失日期时间的小时和分钟数。请记住,此代码不会处理转义字符之类的事情,但我认为这是您所期望的。啊…我编写了如下扩展名(“附件;文件名={0}”,datetime.Now+“.csv”);这在我的家用电脑上运行非常好,非常感谢!