我正在研究一個ASP.NET MVC應用程序,我們需要生成PDF報告。在後端生成這些PDF報告可能需要很長時間(超過30秒)。我們公司使用一個名爲squid的代理,它將超過30秒的時間超時任何HTTP請求。下載需要花費很長時間才能在服務器上創建的文件的最佳方式
由於上述原因,通過鏈接或獲取請求直接請求PDF報告將超時。
我該如何解決這個問題?有沒有辦法異步傳遞文件?或者我必須在客戶端請求文件時使用更復雜的協議,然後定期輪詢服務器以查看文件是否已經生成,然後在準備好時再次請求下載文件?
我正在研究一個ASP.NET MVC應用程序,我們需要生成PDF報告。在後端生成這些PDF報告可能需要很長時間(超過30秒)。我們公司使用一個名爲squid的代理,它將超過30秒的時間超時任何HTTP請求。下載需要花費很長時間才能在服務器上創建的文件的最佳方式
由於上述原因,通過鏈接或獲取請求直接請求PDF報告將超時。
我該如何解決這個問題?有沒有辦法異步傳遞文件?或者我必須在客戶端請求文件時使用更復雜的協議,然後定期輪詢服務器以查看文件是否已經生成,然後在準備好時再次請求下載文件?
我發現,在現有的問題Handle file download from ajax post
這裏是一些有用的幫助就是我所做的。我創建了一個ajaxDownload css類來標識我想要異步處理的鏈接。
我在服務器上創建了一個名爲DownloadFile的方法,該方法將從特定位置下載文件。
我用生成PDF的url替換了原來的url,然後返回它的文件名。我在成功事件中傳遞文件名,然後使用window.location.href下載文件。
$("a.ajaxDownload").on("click", "", function(e) {
e.preventDefault();
var url = $(this).attr('href');
$.ajax({
type: "POST",
url: url,
error: function(res) {
alert("an error has occured");
},
success: function(res) {
var url2 = '/QuoteSummary/DownloadFile/?filename=' + res;
window.location.href = url2;
}});
});
ajax是異步的 – madalinivascu
據我所知,你不能通過ajax異步下載文件。 –
你是說當我下載一個文件我同步做,這將意味着我會阻止服務器發送頁面給其他用戶? – madalinivascu