繁体   English   中英

在Web应用程序中验证Excel文件

[英]validating a excel file in a web application

我的任务是允许用户上传excel文件并验证文件中的数据。

我研究了如何在用户向客户端提交excel文件之前(在javascript中)验证数据的方法,但看来您无法做到这一点。

似乎唯一的方法是将此文件发布到服务器并在服务器上进行验证。

这似乎可能很耗时。 截至目前,我们还真的不知道该文件的大小,因此我们真的不想停顿我们的服务器。

有什么好办法吗?

另外,我不是将excel文件保存在服务器上,而只是在乎其中的数据。

这是一个ASP .NET应用程序。

有一些工具可以解析javascript中的excel文件 ,因此这是可行的,但是您需要提供更多信息。 什么使有效文件? 是否有特定格式,还是只想看看它是否可以在excel中打开?

这种验证肯定应该在服务器端进行。 即使有客户端验证,您也不能信任它或假设它运行正确并且无论如何都希望重新验证服务器端。

如果文件可能很大,并且验证可能需要很长时间(超过一会儿),那么您将需要异步执行此类任务。 作为一般的体系结构指南,过去,我这样做如下:

有两个数据库表来保存电子表格数据。 一种用于数据本身(记录级),另一种用于上载电子表格的整体状态(文件级)。 像这样:

Spreadsheets
----------
ID
User
Status
DateUploaded
DateProcessed
etc.

SpreadsheetRecords
----------
ID
SpreadsheetID
SomeValueFromTheData
TheNextValueFromTheData
etc.
ValidationMessage
  1. 用户上传电子表格,该电子表格将转换为强类型数据并保存在某处。 这是在Web应用程序中对请求的处理中立即(同步)发生的。 如果失败,则文件本身无效,以至于无法通过业务逻辑运行该文件,并向用户显示错误。 您可以使用多种技术/库/工具将电子表格转换为内存对象,具体取决于电子表格的格式。 (例如,Google搜索“将OpenXML转换为C#中的DataTable”可能是一个开始的地方。)
  2. 向用户显示一个指示上传成功的响应,并且将开始处理。 此时,电子表格中的所有“记录”都保存在一个表中,并链接到另一个表中的记录,该表维护处理状态,与之关联的用户等。用户每次重新加载页面时他们只会看到处理的当前状态如何。 这部分在很大程度上取决于UI。 我以前只有一个页面,用户可以在其中检查以前上传的状态。 例如,他们可以批量上传,而系统只会依次处理每个文件。
  3. 后台进程(在我的情况下为Windows Service)连续轮询Spreadsheets表以查找处于“待处理”状态的新记录,并“处理”该数据。 这就是发生“验证”的地方,这取决于业务规则可能几乎意味着任何事情。 对于SpreadsheetRecords每个记录,执行业务逻辑并存储结果(例如,如果存在错误,则将该错误放入ValidationMessage )。
  4. 处理完该数据中的所有记录后,请使用状态更新Spreadsheets的记录。 (通过,失败等。)此时,您可以通过电子邮件或网站上的某些通知(例如,类似于Facebook的通知栏)通知用户处理已完成。
  5. 当用户再次检查页面以查看处理状态时,他们可以看到处理结果,包括有关数据中特定记录的任何特定错误消息。

当然,这都是非常高级的。 这里有许多假设需要针对您自己的设置/体系结构进行调整。 要点是整个事物的异步性质。 也可以完全同步执行所有这些操作,这只需要消除告诉用户它已经开始并在完成时通知他们的步骤。 但是,对于类似这样的事情进行同步处理可能会导致长时间运行的任务超时(或至少会带来不良的用户体验)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM