创build表客户端,然后下载excel文件或生成Excel文件服务器端,保存到服务器,并使用JQuery从那里下载?

我正在为拥有30万用户的公司网站使用静态HTML / C#方法。

背景:

我在我的网站上有一个HTML页面,用户可以查看大量的报告(20,000多条logging)。 但它是所有分页/sorting的服务器端(大多数用户将查看像20000logging的151-200)。 如果用户select调用API / api / ViewAllCustomers的报表,则运行查询,并使用诸如“userNumber + filters + reportName”之类的键caching整个结果5分钟。 当用户更改报表的页面大小时,将从caching中提取相同的报表,但返回不同数量的logging。

问题:

当用户点击“下载到Excel”button时,我需要将整个报告(20,000多条logging)下载到用户的excel文件中,而无需更改他们正在查看的当前报告(可能是logging数为151到200条logging) 。 这似乎有几个选项。 我可以使用与我的API“bool DownloadToExcel = false”的重载参数相同的方法,然后将文件保存在服务器上,并返回到该URL的path。 或者我可以build立一个不可见的表客户端并从那里下载。 当成千上万的人要求“下载到Excel”时,服务器将被文件充斥。

我应该caching这些excel文件服务器端几分钟,并给用户一个文件的path? 或者我应该build立表客户端,并从那里生成的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> 

但关于caching,因为filter更改结果excel文件,您有两个或更多选项:

1:不要caching结果文件。 因为根据filter你有不同的报告

2:不要将其保存在服务器上的硬盘上。 如果你的文件大小很高,这个下载中断可能是你的问题。

3:使用像“reportType-filter1-filter2”这样的键来caching文件,filter按字母顺序sorting。