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

时间:2015-07-27 02:15:30

标签: javascript c# jquery excel

我正在为拥有300,000名用户的公司网站使用静态HTML / C#方法。

背景:

我的网站上有一个html页面,用户可以查看大量报告(20,000多条记录)。但它是所有被分页/排序的服务器端(大多数用户将查看类似于20,000个记录的151-200)。如果用户选择调用API / api / ViewAllCustomers的报表,则会运行查询,并使用“userNumber + filters + reportName”之类的密钥将整个结果缓存5分钟。当用户更改报告的页面大小时,将从缓存中提取相同的报告,但返回不同数量的记录。

ISSUE:

当用户点击“下载到Excel”按钮时,我需要将整个报告(20,000多条记录)下载到用户的Excel文件中,而不更改他们正在查看的当前报告(可能是151-200的记录) 20,000条记录)。似乎有几种选择。我可以在我的API“bool DownloadToExcel = false”上使用与重载参数相同的方法,然后将该文件保存在服务器上并返回该URL的路径。或者我可以构建一个不可见的表客户端并从那里下载它。好像当成千上万的人要求“下载到Excel”时,服务器上会充满文件。

我应该在服务器端缓存这些excel文件几分钟,并为用户提供该文件的路径吗?或者我应该构建表客户端,并从那里生成Excel文件?

1 个答案:

答案 0 :(得分:1)

最简单的方法是在浏览器的新标签页中打开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>

你也可以把iframe命名为&#39; downloadTarget&#39;并改变目标&#39;上述表格的属性为&#39; downloadTarget&#39;

<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:使用&#34; reportType-filter1-filter2&#34;等密钥缓存文件过滤器按字母顺序排序。