ASP.NET上传的文件

时间:2009-07-21 08:46:28

标签: c# asp.net file file-upload

我有一个在客户端使用jQuery的ASP.NET Web应用程序。 在其中一个Web表单上,我有一堆控件要填充,还有一个上传控件。 用户可以在填写表单上的其他条目时运行上载。 当用户保存表单时,包括文件在内的所有数据都存储在数据库中。 问题是当用户填写表单时如何处理上传的文件? 我有两种可能的解决方案,但不知道哪种解决方案更优化

  1. 缓存上传的文件,稍后,在保存时,将其检索并存储到包含所有其他数据的数据库中。
  2. 将文件保存在临时文件夹中,然后阅读。
  3. 最佳解决方案是什么? 提前谢谢。

4 个答案:

答案 0 :(得分:2)

我认为最合适的解决方案是将上传的文件存储在缓存中。 这是代码

    var fileKey = Guid.NewGuid();
    var fileStream = new Byte[Request.Files[0].ContentLength];
    Request.Files[0].InputStream.Read(fileStream, 0, Request.Files[0].ContentLength);
    Cache[fileKey.ToString()] = fileStream;

fileKey GUID可以存储在ViewState中,也可以作为响应发送给客户端。 之后,当保存整个表单时,可以检索缓存文件并将其与其他数据一起存储到数据库中。 这种方法的好处是,如果用户从页面缓存文件导航将过期,从而避免资源泛滥。 我们可以使用

设置到期时间
Cache.Add(fileKey, fileStream, null, DateTime.UtcNow.AddMinutes(10), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);

功能

答案 1 :(得分:1)

怎么样:

3:将其存储在数据库中,但标记为处于不完整状态

这可以是一个单独的表,也可以是具有状态列的同一个表。

答案 2 :(得分:0)

我没有看到两个选项之间的区别:缓存文件是什么意思?是否与保存到临时文件夹相同?

AFAIK,大多数网站都不会开始上传,直到整个表单填满(如果您的用户取消或浏览,该怎么办?)。然后他们会显示一个临时进度条(“请等我们分析您的数据......”)。

作为一般设计规则,在任何时间点接收部分数据可能在以后导致不稳定的数据。如果必须逐步执行此操作,请将表单更改为向导。

答案 3 :(得分:0)

像其他人一样 - 您只需上传即可。你可以通过多种方式实现这一目标:

  1. 将文件上传到临时文件夹中,当他们最终说保存或完成时 - 您可以将文件从该临时文件夹移动到通常保存常规文件的其他文件夹。
  2. 当用户点击临时文件的上传按钮时,您可以做的另一件事是,您可以检查临时文件夹并清除其他文件已停留超过1-2天/周,以便这样做你知道你不是在浪费空间。
  3.   

    也许,你也可以打开一个计时器   您定期清理的网站   这个文件夹。我会说这更多   高效,你不必等待   让用户进来并点击   上传按钮以清理空间。