Asp.net MVC 4导出为CSV-另存为对话框在Chrome和Firefox中不工作
我正在尝试使用“打开/保存”选项将Asp.net MVC 4导出为CSV-另存为对话框在Chrome和Firefox中不工作,asp.net,asp.net-mvc-4,http-headers,download,Asp.net,Asp.net Mvc 4,Http Headers,Download,我正在尝试使用“打开/保存”选项将csv文件导出到用户 我的问题类似于(在Chrome和Firefox中下载文件),我尝试了@Dev建议的解决方案,但它不起作用 我写的代码如下:- return File(new System.Text.UTF8Encoding().GetBytes(csvData), "text/csv", filename); 但是,它在Chrome中不起作用。默认情况下,正在下载该文件 在谷歌搜索之后,我发现,我正试图从中做如下事
csv
文件导出到用户
我的问题类似于(在Chrome和Firefox中下载文件)
,我尝试了@Dev
建议的解决方案,但它不起作用
我写的代码如下:-
return File(new System.Text.UTF8Encoding().GetBytes(csvData),
"text/csv", filename);
但是,它在Chrome中不起作用。默认情况下,正在下载该文件
在谷歌搜索之后,我发现,我正试图从中做如下事情:-
var csvData = "hello";// I am filling this variable with ,y values from DB!
var cd = new System.Net.Mime.ContentDisposition
{
// for example foo.bak
FileName = "test",
Inline = false,
};
Response.AppendHeader("Content-Disposition",
cd.ToString());
return File(new System.Text.UTF8Encoding().GetBytes(csvData),
"text/csv");
但它仍然在用Chrome下载文件。然后我发现,@JoãoSimões
提到:-
这取决于浏览器。如果设置为自动下载到
给定文件夹,浏览器将自动下载。Firefox和
Chrome是一些具有这种行为的浏览器João Simões 1月3日在
13:09
如果以上是真的,那么我该如何克服我的问题呢?如何获取打开/保存对话框?
我无法使用“打开/保存”选项导出我的CSV
编辑1
我试着做这样的事情(明白了):-
和我的控制器代码:-
return new ExcelResult
{
FileName = "sample.xls",
Path = "",
Data = csvData
};
但是,它仍然在下载Excel
编辑2
尝试使用HttpContext.Current.Response打开excel
/// <summary>
/// Export CSV
/// </summary>
/// <returns></returns>
public void DownloadCSV()
{
try
{
var csvData = Session["CSVData"].ToString();
byte[] getContent = new System.Text.UTF8Encoding().GetBytes(csvData);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ClearHeaders();
System.Web.HttpContext.Current.Response.Buffer = true;
System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", getContent.Length.ToString());
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + "testing.csv");
System.Web.HttpContext.Current.Response.BinaryWrite(getContent);
System.Web.HttpContext.Current.Response.Flush();
}
catch (Exception ex)
{
HttpResponseMessage message = new HttpResponseMessage()
{
Content = new StringContent("Error Exporting Data")
};
throw new System.Web.Http.HttpResponseException(message);
}
}
//
///导出CSV
///
///
公开作废下载CSV()
{
尝试
{
var csvData=Session[“csvData”].ToString();
byte[]getContent=new System.Text.UTF8Encoding().GetBytes(csvData);
System.Web.HttpContext.Current.Response.ClearContent();
System.Web.HttpContext.Current.Response.ClearHeaders();
System.Web.HttpContext.Current.Response.Buffer=true;
System.Web.HttpContext.Current.Response.ContentType=“应用程序/vnd.ms excel”;
System.Web.HttpContext.Current.Response.AddHeader(“Content-Length”,getContent.Length.ToString());
System.Web.HttpContext.Current.Response.AddHeader(“内容处置”、“附件;文件名=“+”testing.csv”);
System.Web.HttpContext.Current.Response.BinaryWrite(getContent);
System.Web.HttpContext.Current.Response.Flush();
}
捕获(例外情况除外)
{
HttpResponseMessage=新的HttpResponseMessage()
{
内容=新的StringContent(“导出数据时出错”)
};
抛出新的System.Web.Http.HttpResponseException(消息);
}
}
但是,还是不行 尝试为您的内容处置标题添加以下内容:
Response.AppendHeader("Content-Disposition", "attachment");
@你们试过第二种解决方案了吗?他们把图片放在展示如何在chrome中打开对话框的地方。我有chrome版本30.0.1599.101 m,如果你去设置在那个预先设置,然后下来你会发现复选框,这是在上面的链接中给出的答案,这将解决你的问题,我想。
如果仍然无法工作,则可能是您的浏览器有问题,请将其更新为最新版本,然后重试。
编辑1:
如果您将文件扩展名设置为.xls,那么它将在excel for csv中打开。您需要将文件名设置为FileName=“sample.csv”,
然后它将以csv格式打开
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=GridViewtoCSVExport.csv");
Response.Charset = string.Empty;
Response.ContentType = "application/text";
有关详细信息,请检查此项如果用户已将其浏览器配置为自动下载文件,则在服务器上绝对无法强制显示此对话框。恐怕您试图实现的目标是不可能的。它仍在下载文件:(当您从任何其他页面下载csv/xls文件时,是否会出现“打开/保存”对话框?如果不是,则可能不是您的代码,而是浏览器设置。@developer10214:-您发布的链接,我收到了对话框。我想可能是我的代码问题,也可能是外星人攻击!!!我仍在挠头。。您的代码性能良好很好。这取决于浏览器设置。没有办法解决这个问题,你不能/不应该试图覆盖用户的浏览器设置,因为这就像黑客入侵机器一样。你说它仍在下载是什么意思?Chrome、Safari和Firefox将直接将文件下载到下载文件夹。除非用户同意,否则它不会请求保存对话框t单击链接并单击“另存链接为”。另一个选项是使用文件API。@AkashKava-真的!我明白了。但应该有某种东西可以让我们覆盖该功能。或者换句话说,@Poornima说,我想覆盖浏览器设置。
根据她的破解方法!是的,我已经尝试过了。我尝试过了两天前,当@developer10214
建议这可能是浏览器问题!!但是,它不起作用。我甚至卸载了chrome并重新安装了它…:(我卸载并安装了我的chrome,以获得最新版本,因为它没有更新。但没有成功。我只是尝试了硬编码文件名,但没有结果。让我们看看,我已经联系了我的网络团队,如果他们做了一些可疑的事情。grrrr…谢谢你的建议satish!非常感谢。尝试添加此代码并检查它是否可能会有问题。)正在工作Response.Output.Write(getContent.ToString());Response.Flush();Response.End()
可能会晚。但经过大量努力,我还是没能得到它。感谢我的上司理解了这个问题。您的链接有助于理解问题。感谢您的努力+1。将要求您更新答案,突出显示链接:)你可能是对的!在我搔了9天的头之后,我也有同样的感觉。让我想想,如果我能找到其他解决办法的话。谢谢!
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=GridViewtoCSVExport.csv");
Response.Charset = string.Empty;
Response.ContentType = "application/text";