我收到了以下Ajax调用:
$.ajax({
type: 'POST',
url: 'AJAX.aspx/DownloadFile',
data: {},
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data)
{
window.location.href = 'data:txt/octet-stream;base64, ' + data.d;
},
error: function (x, e)
{
alert("The call to the server side failed. " + x.responseText);
}
});
这是我的服务器端代码:
[WebMethod]
public static string DownloadFile(){
HttpResponse response = HttpContext.Current.Response;
response.AppendHeader("Content-Disposition", "attachment;filename=b.txt");
FileStream fs = new FileStream("C:/b.txt", FileMode.OpenOrCreate);
byte[] data=new byte[fs.Length];
fs.Read(data, 0, (int)fs.Length);
fs.Close();
return Convert.ToBase64String(data);
}
我在这里遇到两个问题:
在Opera,Firefox和Chrome中我可以下载由服务器发送的base64二进制数据组成的文件。它们唯一的问题是文件名是浏览器的默认值。在Opera中它是“默认”,在Chrome“下载”中,在Firefox中是这样的:“lpyQswKF.part”。如何手动分配名称?
在IE中我收到以下错误:“无法显示网页。此网页上的某些内容或文件需要您尚未安装的程序。”
答案 0 :(得分:1)
您可以像这样分配文件名:
var a = document.createElement("a");
a.download = "file name";
a.href = 'data:txt/octet-stream;base64,' + data.d;
document.body.appendChild(a);
a.click();
我还在搜索如何让它在IE中运行