我正在尝试从javascript函数下载文件。我看到很多服务器端代码的例子,我认为我的工作正常。
public ActionResult DownloadReport(LongParameterValueModel reportId)
{
Boolean isZipFile = false;
String extension = "";
String fileName = "";
String contentType = "";
try
{
using (MemoryStream ms = ReportRecord.GetReport(Session["bankId"].ToString(), reportId.Value, out isZipFile, out extension, out fileName))
{
if (isZipFile)
{
// download instead of open in browser
}
else
{
if (extension.ToUpper() == "PDF")
{
var cd = new System.Net.Mime.ContentDisposition
{
FileName = fileName.Replace(",", ""),
Inline = true,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
contentType = "Application/pdf";
}
else
{
var cd = new System.Net.Mime.ContentDisposition
{
// for example foo.bak
FileName = fileName.Replace(",", ""),
Inline = true,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
contentType = "text/plain";
}
}
return File(ms.ToArray(), contentType);
}
}
catch(Exception ex)
{
}
}
我无法找到的是如何调用该客户端以在新窗口中返回PDF / txt数据。我目前正在使用:
$.ajax({
url: '@Url.Action("DownloadReport", "Search")',
type: 'POST',
cache: false,
data: {
Value: dataItem.ID
},
success: function (data, status, xhr) {
var w = window.open("data:application/pdf;base64, " + data);
//var w = window.open('about:blank', 'ReportViewer');
//w.document.write(data);
//w.document.close();
},
error: function (xhr, status, error) {
alert(error);
}
});
但没有任何事情发生。注释版本打开一个空白窗口但没有任何内容写入(或者如果它没有显示PDF或txt文件)。
有什么想法吗?
感谢。