2016-11-23 15 views
0

我正在研究一個ASP.NET MVC應用程序,我們需要生成PDF報告。在後端生成這些PDF報告可能需要很長時間(超過30秒)。我們公司使用一個名爲squid的代理,它將超過30秒的時間超時任何HTTP請求。下載需要花費很長時間才能在服務器上創建的文件的最佳方式

由於上述原因,通過鏈接或獲取請求直接請求PDF報告將超時。

我該如何解決這個問題?有沒有辦法異步傳遞文件?或者我必須在客戶端請求文件時使用更復雜的協議,然後定期輪詢服務器以查看文件是否已經生成,然後在準備好時再次請求下載文件?

+0

ajax是異步的 – madalinivascu

+0

據我所知,你不能通過ajax異步下載文件。 –

+0

你是說當我下載一個文件我同步做,這將意味着我會阻止服務器發送頁面給其他用戶? – madalinivascu

回答

1

您可以使用類似於signalr的內容來輪詢服務器以完成作業,然後在瀏覽器完成後重定向瀏覽器。

只是一個想法,但你可以使用hangfire,安排PDF的創建。

0

我發現,在現有的問題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; 
      }}); 
    }); 
相關問題