2012-04-05 95 views
3

我有这个页面,用户可以上传文档(多个文档,每个大小限制为10MB)。这是一个两步过程。步骤1有输入表单。第2步是带有提交按钮的预览页面。上传多个/大文件

我应该如何处理用户在预览页面上关闭浏览器而不提交表单的场景?我应该在步骤1之后将文件保存在临时位置吗?这是一个体面的解决方案?

上传(合理)大型文件的最佳做法是什么?

谢谢。

回答

0

只能在提交表单的使用临时文件夹中的文件保存文件,并复制到它们的最终位置。

无论如何,最好是实现一个垃圾回收器。垃圾收集器可以每晚清空临时文件夹。但是,当使用垃圾回收器时,如果您有办法识别未提交的文件(例如,如果在提交时将一行添加到数据库中),则可以从头开始将文件放在最终位置,然后让垃圾收集器每天晚上将它们移除。

使用JQuery UI插件(如Uploadify:http://www.uploadify.com/)可以上传大文件。 您应该注意,它使用闪光灯,一方面非常适合上传大文件,另一方面它会阻止您的应用程序支持苹果机器,如iPad。

0

如果用户离开,那么让他们重新开始。他们很可能离开有一个很好的理由。如果发生事故,请将责任留在最后。如果您选择在未提交数据的情况下存储数据,则可能会导致恶意用户利用您的存储空间。

您还可以查看称为分块的进程。

对于在文件上传MVC3深入的讨论更,请参阅本SO帖子:MVC 3 file upload and model binding

+0

“如果用户离开,那么让他们重新开始。” - 我将不得不在第1步后保存文件,对吧? – user471317 2012-04-06 00:03:15

+0

@ user471317 - 您可以使用PRG模式将文件放入“TempData”中。如果您在步骤1之后保存文件,那么为什么要让它们预览?是否有通过取消按钮涉及的删除功能?一旦他们决定接受,是否设置了旗帜?我问的原因是你将不得不做一些审计,以确定如何删除在第2步之后没有提交的文件。并且如果用户不必在步骤2中单击接受,那么他们只会执行步骤1并在别处导航以节省时间。 – 2012-04-06 00:26:14

+0

“如果您在步骤1之后保存文件,那么为什么要让它们预览?” - 我不想在步骤1之后保存文件。您建议在步骤1之后将文件保存在TempData中? – user471317 2012-04-08 21:25:45