我正在尝试使用打开/保存选项将csv文件导出到用户.
我的问题是类似于how-to-force-chrome-to-open-an-open-file-dialog-when-downloading-a-file-via-as(它正在Chrome和Firefox中下载文件),我尝试了@Dev建议的解决方案,但它无法正常工作.
我编写了如下代码: –
return File(new System.Text.UTF8Encoding().GetBytes(csvData),"text/csv",filename);
但是,它无法在Chrome中运行.默认情况下会下载该文件.
然后在谷歌搜索后,我找到了returning-a-file-to-view-download-in-mvc,我试图做下面的事情: –
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中下载文件.然后我遇到了how-to-display-open-save-dialog-asp-net-mvc-4,其中@JooSimes提到: –
That is browser dependent. If you set to download automatically to a
given folder,the browser will download automatically. Firefox and
Chrome are some browsers with this behavior. – Joo Simes Jan 3 at
13:09
如果以上是真的,那么我怎样才能克服我的问题呢?如何进行打开/保存对话?
我无法使用打开/保存选项导出我的CSV.
编辑1
我试图做这样的事情(得到它here): –
public class ExcelResult : ActionResult
{
public string FileName { get; set; }
public string Path { get; set; }
public string Data { get; set; }
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.Buffer = true;
context.HttpContext.Response.Clear();
context.HttpContext.Response.AddHeader("content-disposition","attachment; filename=" + FileName);
context.HttpContext.Response.ContentType = "text/csv";
context.HttpContext.Response.Write(new System.Text.UTF8Encoding().GetBytes(Data));
}
}
和我的控制器代码: –
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);
}
}
但是,仍然没有工作!
解决方法
@shubh你试过
How to force Chrome to open an “open file dialog” when downloading a file vía ASP.NET codebehind?秒解决方案他们把图像放在显示如何打开chrome对话框的地方.我有铬版本30.0.1599.101米,如果你去设置那个提前设置然后下来你会发现上面的链接答案给出的复选框,这将解决你的问题我想.
如果仍然无法正常工作,那么您的浏览器可能会出现问题,只需将其更新到最新版本然后重试.
编辑1:
如果你把你的文件扩展名.xls然后它将在excel中为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";
更多检查这个http://surajdeshpande.wordpress.com/2013/09/03/export-gridview-data-to-csv-file-in-asp-net/
