上传应该用前端直接对接第三方还是通过独立的后端服务的形式实现?

Author Avatar saleding 发表于 • 2017年05月05日 00:26 • 共 • 523 • 次浏览

我们公司现有业务上传都是基于七牛上传组件完成的,也就是说通过他提供的sdk ,不走我们的服务器,直接上传到他的服务器上。我们的CTO倾向于这种做法,因为这样不用走我们的服务器流量,也会少走一步服务端请求。 但是这个方案有几个问题:

  1. 通过前端直接使用七牛sdk的上传,我们无法增强前端的上传体验,因为都是基于七牛组件的,因此上传只能做的非常简陋,没有办法优化。或者说,优化的成本太大。
  2. 用户体验本身不好,因为上传功能都是通过七牛的组件,我们无法深入开发实现什么断点续传之类的高级功能
  3. 无法独立上传组件,每个业务都需要单独去开发一个上传组件,而不能通过组件化来封装一个上传组件,供不同业务去调用。
  4. 涉及上传的业务都对七牛的上传sdk有很大依赖,一旦我们哪天需要更换七牛云服务,那我们前端的改动工作量巨大。

针对这些问题,我能想到的,就是我们前端通过node 来实现后端上传的服务,或者干脆让他们后端技术部立项来提供一个上传服务,但是这样一来,又有问题,既

  1. 上传文件通过我们的后台需要从服务器再中转一次到七牛那边,多了一次处理步骤,对服务器性能有很大的消耗
  2. 因为走我们的服务端,那么流量也会成本的增加,如果是很多语音、视频文件,那流量是巨大的

基于以上2点,公司部分高层不愿意上传功能走我们自己的后端方案。 因此,到底何种方案更好,以什么方法来说服高层呢 ?多谢。

共有1个红包,共5
  1. saleding2017年05月05日 00:34 前创建了 5 元的红包; 红包已经发放成功.
最后编辑于 • 2017年05月05日 00:26 •  
1 回复
avatar
0
发放红包 2017年05月05日 01:28   # 1 楼

@saleding

前端上传的方案是可行的。

  1. 七牛云的代码支持以下三个回调: before, progress, complete, uploaded。除了上传进度无法把握外,其它的控制都是有的。 所以对于前端来说,可以估计一个合理的进度处理,提高展示效果。 七牛的API在DOM关联上的设计确实并不是很好,但是DOM的控制还是比较灵活的,所以可以通过其它的组件做交互,通过jquery触发事件来调用文件上传功能。这个功能应该可能需要花时间

  2. 前端上传的同时要将上传的文件信息返回到服务器,也就是服务器仍需要有文件相关的API

并处理好文件名的保存,同时也要将返回的七牛信息传回到服务器。

也就是后端仍需要有一个文件的管理服务。

记录每个上传的文件的信息和状态。

而前端上传,只是一种压力的缓解的办法。

  1. 无论是前后还是后端都需要有一个中间层来隔离这种异步存储的差别。

如果隔离可以参考我的file-cloud-uploader,目前支持阿里云,aws。你也可以添加七牛的adapter.

https://github.com/calidion/file-cloud-uploader

  1. 通常有一个自己的文件上传服务器是必要的。 因为只有自己的服务器才能统一的处理异构的文件服务,并且对于上传频烦的业务,网站本身要对上传的处理进行精细化处理。也是必要的。 但是如果在技术水平还没有达到时,可以考虑直接使用单一的云存储,节约开发与人力成本。

  2. 当你们的上传内容包含有更多的类型的文件时,有自己的管理平台最终肯定是必须的。七牛等平台只是分发的平台。你们自己最终仍需要一个系统对文件进行业务上的管理。

  3. 直接与间接,或者设置专门的服务器都是可行的。 可以根据实际的需要进行选择。

建议必须完成的事情是:

1、服务器完整记录文件的信息,以及文件的关联信息,将所有的文件独立管理,并且将文件与业务的关系保存好。

2、使用统一的内部hash算法严管理文件。

3、前期使用前端上传,后期可以根本实际进行调用。

以上是我对所描述的问题的分析与提供的建议。实际还是需要选择一个最容易达成的方案,不断的演进,完善。 谢谢。希望能解答到你问题。

你尚未登录,无法进行回复。