建议在提交到DB之前在服务器上存储临时文件的方法

时间:2016-12-02 19:42:31

标签: jquery asp.net-mvc

NET MVC application, in a form I have **5** file input elements and Im saving the form using jquery ajax`。

enter image description here

因此,对于** 新记录 **,用户可以选择一个文件并将文件上传到MVC控制器,但在控制器中我可以& #39; t保存它,因为我没有主要密钥用于记录我要保存。所以我必须暂时存储它。

  

这样做的最佳做法是什么?我正在考虑将byte[]保存到我的Session["appsession"]中,然后在我的控制器中提交表单的时候,我可以获得Session并承诺为服务器提供图像。

其他方式可能是在表单提交上传文件,但因为它的ajax更复杂。

  

有任何线索吗?

2 个答案:

答案 0 :(得分:1)

怎么样把它推到这里:

using System.IO;

string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
Directory.CreateDirectory(dir);

然后创建记录,获取ID,移动文件,删除dir

当然,现在您必须担心处理上传并删除文件,以防第一步(创建记录)失败(以及任何错误的错误)。

我建议您以某种方式更改该工作流程:可能先调用服务器创建记录,然后返回上传文件。这不一定必须在2个UI步骤中完成:在FORM标记中包装文件上传并添加输入[type = hidden],但不是创建该记录所需的其余输入;然后onclick:AJAX创建记录,返回ID;然后将隐藏字段的值设置为该ID,然后提交表单。然后,您的服务器端上载处理程序将接收ID和文件。然后你可以更新记录。

答案 1 :(得分:0)

避免使用会话存储。这将导致应用程序池使用的内存膨胀,或者如果您正在使用SQL Server会话,如果您不从会话实例中显式删除项目,则会降低应用程序的速度。你何时清理它?如果同一个用户在两个不同的浏览器窗口(相同的浏览器实例)上的同一会话中打开同一页面怎么办?会话是一个可怕的过度使用的选择。

您可以持久保存到文件系统,云存储或数据库表(作为blob)。你不会相信我已经有多少应用程序必须解决所有内容被转储到会话存储的问题。再次,避免它。无论你做什么,考虑如果用户完成交易(或完成交易),你将如何进行清理操作。