1

我想知道是否可以在 MVC4(.net 4.5)中将文件上传到服务器并将其保存到内存中。然后在一个单独的表单帖子中,收集该文件并在那时处理它。

我需要能够在页面的一部分上传文件,然后能够在另一部分提交一些表单详细信息,但能够访问我刚刚上传的文件。出于逻辑原因,我不能在主表单上同时发布文件。他们必须分开。

4

3 回答 3

2

虽然您可以将文件存储在内存会话中,但这样做存在一些风险:

  • 如果有人重置应用程序池或 Web 服务器怎么办?该数据将丢失
  • 用户可以上传大文件吗?会上传很多小文件吗?您需要确保可以处理内存要求

如果这些不是问题,请随时将文件存储在会话中:

Session["UploadedFile"] = someByteArray;

如果这些都是问题,那么我建议:

  • 将文件存储在磁盘上并在需要时获取它
  • 将数据存储在与数据库的会话中
于 2013-09-03T15:57:10.573 回答
1

另一个答案有一些很好的解释。我只是想添加一些东西。

在第一页上,将文件保存在 HD 上,同时将文件名/id 存储在数据库中。现在您有了一个指向当前上传文件名的 ID。此 ID 可以在具有 type="hidden" 输入的页面之间传输,也可以通过 Session 变量传输。

如果您没有数据库,则文件名可能是 ID。例如:生成一个 guid,用这个 guid 保存文件名 例如:[guid].xls

于 2013-09-03T18:57:49.860 回答
0

假设您将从第二个表单中保存表单数据以及保存文件(或二进制文件本身)的路径,另一个选项是保存您的数据两次。

发布上传的文件后,按照最初的计划保存文件并获取该新记录的 ID/参考。

您的下一个表单只是将更新的表单数据保存到相同的 ID。

于 2013-09-03T16:02:00.800 回答