我一直在尝试下载我在以下控制器方法中返回的文件
[HttpGet]
public FileResult TestGenerateFile(Guid[] userIDs, Guid reportID)
{
Guid reportRunID = Guid.NewGuid();
ViewBase.LoadViewBase();
IMVCWebPage page = ViewBase.MVCWebPage;
string filePath = manager.GenerateTestFile(reportRunID, reportID, page.SelectedItemID.Value, userIDs);
System.IO.FileStream fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Open);
fileStream.Flush();
return File(fileStream, "application/vnd.ms-excel", Path.GetFileName(filePath));
}
,但每次我在我的ajax成功方法中使用Blob(数据)设法获得一个另存为对话框时,我的excel文件在打开时发出警告并且该文件有许多奇怪的字符,如下所示:
Corrupted excel File Screenshot http://i65.tinypic.com/ixuw77.jpg
我还可以从开发人员工具中看到请求成功,如果我从开发人员工具中复制URL并在单独的选项卡中运行(或在新选项卡中打开),则文件正确下载而不会损坏任何文件数据
ajax代码:
testReportOutputFileGeneration: function () {
$.ajax({
url: window.applicationVirtualPath + '/Reports/TestGeneratefile',
type: "GET",
dataType: 'application/vnd.ms-excel',
data: {
userIDs: userIDs.value,
reportID: $("#lblreport_id").text()
},
success: function (data) {
console.log(data);
var blob = new Blob([data], { type: 'application/vnd.ms-excel' });
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
},
error: function () { console.log("Error")}
});
},
所以我的问题是:有没有办法增强这个ajax来提示用户使用另存为对话框并正确保存excel而没有任何奇怪的字符?提前谢谢。