通过AJAX调用下载PDF

时间:2016-03-18 13:42:02

标签: javascript ajax asp.net-mvc

我试图在我的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调用有关。

0 个答案:

没有答案