处理服务器搁置文件上传

时间:2014-10-09 11:27:20

标签: angularjs azure image-uploading fileapi

我在Azure上运行了一个Angular SPA应用,我希望实现类似于Medium.com的富文本编辑器。我将使用一些现有的编辑器,但我的图像文件有问题。

问题

我希望我的编辑能够在内容中添加图像。我遇到的问题是何时应该将图像上传到服务器

可能的解决方案1:在选择

后立即上传

好的

  • 保存内容的速度更快,因为所有图片都可能已上传
  • 文件在从服务器网址
  • 上传后立即显示

糟糕

    如果用户选择取消编辑,则可能必须在服务器上删除
  • 文件
  • 如果用户只是关闭浏览器窗口,
  • 文件可能会被搁置在服务器上

可能的解决方案2:保存后上传

好的

    使用FileAPI功能立即显示
  • 文件
  • 如果以任何方式丢弃编辑,则不会搁置服务器端文件

糟糕

  • 保存内容可能需要更长时间,因为在保存内容时需要上传所有图片
  • 其他客户端以显示本地文件中的图像

问题

我想实现解决方案1 ​​,因为它提供了更透明的用户界面流程,并且更快地编辑了save =>更好的UX。但是我应该如何管理搁浅的文件?我可以使用一个可以不时删除搁浅文件的工作进程,但我想知道这是否是这种情况的最佳方法。

您建议我实施此内容的方式和方式是什么?

1 个答案:

答案 0 :(得分:1)

这是非常主观的(基于意见的),但我会试一试。

你实际上遇到了比你想象的更大的问题。在抽象方法中,您只描述用户启动新内容时的情况。而如果用户正在编辑现有项目,我会发现更难解决问题。如果他/她删除图像,添加新图像并在最后点击取消将会发生什么。此外,如果创建/编辑时互联网连接中断了吗?

我也会选择解决方案一。而且,当然最小化“坏”的东西,因为它们并不是那么多或难以处理。以下是我如何解决方法1中的所有“坏”:

  • 我的所有文章(或任何用户正在使用编辑器进行编辑)都会有一个布尔标志“IsDraft”或类似的东西。然后我前端的所有业务逻辑只会查找IsDraft == False的项目。
  • 每当用户开始撰写新文章(最容易解决问题)时,我会立即使用IsDraft=True
  • 在我的数据库中创建新项目
  • 有一个链接表,用于保持正在创建的项目ID和正在使用的图像文件(blob)之间的链接。这里的要点是,如果你没有保持已使用和未使用的blob之间的链接,你会有很多麻烦来决定要删除哪个blob以及哪个blob留在存储上。
  • 有一个工作进程(如果我使用云服务,则为worker process in Web Role,或者作为Web Job(+ nice and short explanation here),我使用网站)检查作为草稿的文章超过XXX天。如果找到 - 删除文件+文章本身。

处理现有项目的编辑更具挑战性 - 为此,我可能会采用以下方法:

  • 当用户点击“编辑”并将其标记为草稿
  • 时,创建整篇文章的新副本
  • 如果用户点击保存 - 用现有文章切换新文章(新版本)的内容,将新文章标记为IsDraft - 工作进程将清理它。
  • 如果用户由于某种原因没有点击保存(点击取消,互联网丢失,或计算机重启,或浏览器崩溃,或者或者......) - 新文章将在稍后由工作进程清理

如果你想更深入,更疯狂,你可以在管理面板中有一个部分向用户显示草稿,这样他们就可以继续工作,或者让它自动清理。