我正在尝试csv
使用打开/保存选项将文件导出到用户。
我的问题有点类似于how-to-force-chrome-to-open-an-open-file-dialog-when-downloading-a-file-via-as(It is downloading the file in Chrome and Firefox)
,我已经尝试过建议的解决方案,@Dev
但它是不工作。
我写了我的代码如下: -
return File(new System.Text.UTF8Encoding().GetBytes(csvData),
"text/csv", filename);
但是,它在 Chrome 中不起作用。默认情况下会下载该文件。
然后在谷歌搜索之后,我发现返回-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,其中@JoãoSimões
提到:-
那是依赖于浏览器的。如果您设置自动下载到给定文件夹,浏览器将自动下载。Firefox 和 Chrome 是一些具有这种行为的浏览器。– 若昂西蒙斯 1 月 3 日 13:09
如果上述情况属实,那么我该如何克服我的问题?如何获得打开/保存对话框?我无法使用打开/保存选项导出我的 CSV。
编辑 1
我试图做这样的事情(在这里得到):-
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
尝试打开excelHttpContext.Current.Response
/// <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);
}
}
但是,还是不行!!!