【发布时间】:2012-04-05 22:58:11
【问题描述】:
我有这个页面,用户可以在其中上传文档(多个文档,每个大小限制为 10MB)。这是一个两步过程。第 1 步有输入表单。第 2 步是带有提交按钮的预览页面。
我应该如何处理用户在预览页面上关闭浏览器而不提交表单的情况?我应该在步骤 1 之后将文件保存在临时位置吗?这是一个体面的解决方案吗?
上传(合理)大文件的最佳做法是什么?
谢谢。
【问题讨论】:
标签: asp.net asp.net-mvc-3
我有这个页面,用户可以在其中上传文档(多个文档,每个大小限制为 10MB)。这是一个两步过程。第 1 步有输入表单。第 2 步是带有提交按钮的预览页面。
我应该如何处理用户在预览页面上关闭浏览器而不提交表单的情况?我应该在步骤 1 之后将文件保存在临时位置吗?这是一个体面的解决方案吗?
上传(合理)大文件的最佳做法是什么?
谢谢。
【问题讨论】:
标签: asp.net asp.net-mvc-3
看看这个:
http://www.codeproject.com/Articles/68374/Upload-Multiple-Files-in-ASP-NET-using-jQuery
无论如何,您最终可能会使用 jQuery/AJAX 控件来执行此操作。
【讨论】:
您可以使用临时文件夹来保存文件并仅在提交表单时将文件复制到其最终位置。
无论如何,最好实现一个垃圾收集器。垃圾收集器可以每晚清空临时文件夹。但是在使用垃圾收集器时,如果您有办法识别未提交的文件(例如,如果在提交时将一行添加到数据库中),您可以将文件从头开始放在它们的最终位置,然后让垃圾收集器每晚都会清除它们。
可以使用 JQuery UI 插件上传大文件,例如 Uploadify:http://www.uploadify.com/。 需要注意的是,它使用了flash,一方面非常适合上传大文件,但另一方面会阻碍你的应用程序支持iPad等苹果机器。
【讨论】:
如果用户离开,那么让他们重新开始。他们离开的可能性很大。如果发生事故,责任由他们承担。如果您选择在他们不提交数据的情况下存储他们的数据,这可能会让恶意用户利用您的存储空间。
您还可以查看一个称为分块的过程。
有关 mvc3 中文件上传的更深入讨论,请参阅此 SO 帖子:MVC 3 file upload and model binding
【讨论】:
TempData。如果您在第 1 步之后保存文件,那么为什么要允许它们预览?是否有通过取消按钮涉及的删除功能?一旦他们决定接受,是否设置了标志?我问的原因是您将不得不进行一些审核以确定如何删除未通过步骤 2 提交的文件。如果用户不必在步骤 2 中单击接受,那么他们将执行第 1 步并导航到其他地方以节省时间。