我正在寻找有关我正在进行的项目的指导。作为参考,我擅长HTML,CSS,并且非常熟悉JavaScript,这就是我的编码知识停止的地方。 我正在尝试创建一个允许以下高级工作流程的Web应用程序
用户通过网络用户界面上传CSV文件
应用程序将文件数据随机分成两组
应用程序会创建两个CSV文件,每个文件都包含两个文件中的一个 数据集
应用程序表面通过Web UI链接以供用户下载 每个文件
这是一个更具体的例子:
我很乐意构建这方面的前端,但寻求有关如何设计后端的建议。在这里寻找阻力最小的路径,任何指导都值得赞赏。 谢谢!
答案 0 :(得分:0)
jQuery-csv将在浏览器中读取文件并将行作为JSON发布到服务器 - 如果文件将保持在5000行以下,那么这只是一个很好的选择,因为你让浏览器首当其冲工作。关于这一点的好处是你如何分割文件的逻辑可以在你感到舒服的JavaScript中。缺点是你肯定需要一个数据库来存储数据,直到它从你的JavaScript获得传输完成的标志。然后,您负责从该数据中构建文件。如果您在单击链接时按需执行此操作,则服务器上的速度会很慢。
还有jQuery File Upload作为<input type = "file"/>
提交文件。有了这个,你可以逃脱更大的文件,如果文件不超过几MB,可能没有数据库。将文件写入服务器的某个位置后,您可以发回文件ID。缺点是你在应用程序中存储文件以及潜在的安全隐患。
第三种选择是文件很大和/或很多人上传,即将他们上传到FTP或Amazon AWS等存储介质。然后另一个单独的进程读取文件,执行数据所需的操作,然后将文件写回存储介质。单独的进程负责发送回文件的链接,方法是将它们放在该用户的数据库中或发送电子邮件等。这里的优点是如果你做得对,文件可以是千兆字节,并且它最容易扩展如果你有更多的用户。不好的一面是你正在做一些严肃的服务器端。
编辑:既然这是你正在寻找的方向,我会补充一点。您当然需要两个独立的应用程序 - 您的网站,它只是卸载文件,然后是幕后的工作程序应用程序,通过您的逻辑将文件流式传输到两个附加到新文件的流中。一个简单的版本将是一个计划的版本,它会经常检查新文件,然后移动或删除它们并通过电子邮件将链接发送给您的用户。它可以以增量方式变得更加漂亮,例如使用亚马逊排队,因此您的网站会向工作人员发送一条消息,告知文件已准备就绪,立即触发该操作而不是等待某个预定时间。另一种方法是使用SignalR,以便工作人员可以实时通知网站上的用户“您的文件已准备就绪,点击此处下载”。
无论采取何种方法,请确保文件的链接相当随机且冗长,而不是增加数字或时间戳,或者您将冒一些稍微精明的用户能够窥探其他用户的文件。
在权衡利弊之后,你可能最好的解决方案是上述的一些组合。