簡體   English   中英

創建表客戶端,然后下載excel文件或在服務器端生成excel文件,保存到服務器,然后使用JQuery從那里下載?

[英]Create table client side, then download excel file OR generate excel file server-side, save to server, and use JQuery to download from there?

我正在為擁有300,000用戶的公司網站使用靜態HTML / C#方法。

背景:

我的網站上有一個html頁面,用戶可以在其中查看大量報告(超過20,000條記錄)。 但這全是頁面調度/排序的服務器端(大多數用戶將查看20,000條記錄中的151-200)。 如果用戶選擇了調用API / api / ViewAllCustomers的報告,則會運行查詢,並使用“ userNumber +過濾器+ reportName”之類的鍵將整個結果緩存5分鍾。 當用戶更改報表的頁面大小時,將從緩存中提取同一報表,但返回不同數量的記錄。

問題:

當用戶單擊“下載到Excel”按鈕時,我需要整個報表(20,000多個記錄)才能下載到excel文件中,而無需更改用戶正在查看的當前報表(可能是20,000個記錄中的記錄151-200) 。 似乎有幾個選擇。 我可以對API使用“ bool DownloadToExcel = false”上帶有重載參數的相同方法,然后將文件保存在服務器上並返回該URL的路徑。 或者,我可以構建一個不可見的表客戶端,然后從那里下載它。 似乎當成千上萬的人請求“下載到Excel”時,服務器將充滿文件。

我應該在服務器端緩存這些excel文件幾分鍾,並為用戶提供該文件的路徑嗎? 還是應該在客戶端構建表並從中生成Excel文件?

最簡單的方法可能是在瀏覽器的新標簽頁中打開excel報表。 如果您使用ajax調用,則會考慮響應處理。 兩種簡單的方法:

<a href="/api/ViewAllCustomers" target="_blank">Download The Report</a>

需要將某些內容發布到服務器時的另一種方法:

<form method="post" action="/api/ViewAllCustomers" target="_blank">
   <input name="someProperty" value="someValue" type="hidden" />
   <input type="submit" value="Download the report" />
</form>

您也可以放置一個名為'downloadTarget'的iframe,並將上述表單的'target'屬性更改為'downloadTarget'

<iframe name="downloadTarget" style="width: 0; height: 0; border: 0;"></iframe>

<form method="post" action="/api/ViewAllCustomers" target="downloadTarget">
    <input name="someProperty" value="someValue" type="hidden" />
    <input type="submit" value="Download the report" />
</form>


但是由於過濾器會更改結果excel文件,因此您有兩個或多個選項:

1:不緩存結果文件。 因為您根據過濾器有不同的報告

2:不要將其保存在服務器的硬盤上。 如果文件太大,則此下載中斷可能是您的問題。

3:使用“ reportType-filter1-filter2”之類的鍵緩存文件,並按字母順序對過濾器進行排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM