文件上传作为原子操作

use*_*300 2 c# azure-storage-blobs asp.net-mvc-3

我目前正在使用mvc 3和c#开发一个应用程序.我需要实现一个文件上传控制器.我有一个db表,用于存储文件元数据,名称,大小,类型,文件路径,目的等.我想将实际文件存储为windows azure服务器上的blob,并使用db行作为指向它的指针.

我想保存连接到文件的项目,例如Person Profile(目的),然后在我获取配置文件的主键后执行上传,这样我就可以进行必要的关联,然后上传文件并保存文件的元数据.

如果用户可以在按下按钮之前选择文件以保存配置文件页面,那么如何使此原子化.

在完成剩余的步骤之前,似乎我必须以某种方式将文件写入会话变量或将文件写入某个临时文件夹(分段).有没有更好的方法来执行这些可以保证原子性的步骤?

Ono*_*dai 5

恕我直言,问题在于架构师认为这个过程是一个原子操作,而用户体验则会另有说法.你现在正处于冲突的中间.=)

您可以保证两个不同进程的原子性,以及后处理的数据统一性.让我做一些猜测,并假设您正在为当前(交互式)用户实现配置文件创建过程.

  • 允许用户上传其图片; 将其提交到您的存储,将其标记为事务,将SessionID元数据添加到它.

  • 用户完成创建他/她的个人资料后,扫描存储以查找具有相同SessionID的图片.将两者绑定在一起(例如,将文件ID与配置文件ID相关联.)更复杂的过程将包括,例如,"配置文件创建"cookie,其中包含应该存储的独占ID - 因此,如果用户放弃该会话,稍后返回上传的文件仍然可以使用.

  • 实现'垃圾收集器'.在达到阈值(时间或其他)后处理未使用的文件.

我知道这些建议并不完全涵盖您的原始请求,但它们可能有助于简化您的实施.