我试图在我的MVC应用中加载某个页面时下载PDF文件。我有以下JS代码,在文档准备就绪时触发:
function downloadTripReport() {
$.ajax({
url: '/CompanyHomepage/Download?tripReportId=21',
success: function (data) {
var blob = new Blob([data]);
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "TripReport.pdf";
link.click();
}
});
}
我实际上从这个SO post得到了这个解决方案。
正在调用以下MVC方法:
public FileResult DownloadTripReport(int tripReportId)
{
try
{
var userId = this.TripReportData.GetItem(tripReportId).UserId;
var pdf = this.AzureStorage.RetrieveBlob(this.GetAzureContainerName(userId),
this.GetAzureTripReportBlobName(tripReportId));
return File(pdf, "application/pdf", "TripReport.Pdf");
}
catch (Exception exception)
{
...
}
}
实际上,此方法从Azure存储中检索PDF并将其发送回调用客户端。此代码正常工作。我知道这是因为它以其他方式被调用,它正确地将PDF发送到客户端,然后可以查看。
问题是这个。进行AJAX调用时,会将PDF文件下载到客户端。但是当点击PDF时,操作系统说格式不正确(即,它不是PDF)。我检查了下载文件的大小,这是正确的。但是,出于某种原因,操作系统并不认为它是有效的PDF。所以,我猜测问题必须与AJAX调用有关。