我有一个在客户端使用jQuery的ASP.NET Web应用程序。 在其中一个Web表单上,我有一堆控件要填充,还有一个上传控件。 用户可以在填写表单上的其他条目时运行上载。 当用户保存表单时,包括文件在内的所有数据都存储在数据库中。 问题是当用户填写表单时如何处理上传的文件? 我有两种可能的解决方案,但不知道哪种解决方案更优化
最佳解决方案是什么? 提前谢谢。
答案 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)
像其他人一样 - 您只需上传即可。你可以通过多种方式实现这一目标:
也许,你也可以打开一个计时器 您定期清理的网站 这个文件夹。我会说这更多 高效,你不必等待 让用户进来并点击 上传按钮以清理空间。