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

本文关键字:excel 文件 下载 服务器 从那里 保存 JQuery 服务器端 然后 客户端 创建 | 更新日期: 2023-09-27 18:04:42

我为一个拥有300,000用户的公司网站使用静态HTML/c#方法。

背景:

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

问题:

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

我应该缓存这些excel文件服务器端几分钟,并给用户一个路径的文件?还是应该在客户端构建表,然后从那里生成Excel文件?

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

最简单的方法可能是在浏览器的新选项卡中打开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"键的文件,过滤器按字母顺序排序。