到新公司几个月,发现好多奇怪的实现。 比如他们的生成报表下载文件不是直接下载,而是先上传到服务器上,接口返回服务器上的文件地址,本以为他们需要文件归档或者备份,然而明确需求后只是即时生成下载,运维还特地写了定时删除文件的脚本。 询问了一下开发同事,发现他们习惯于这么实现,甚至不太会直接下载的实现方式(惊了个呀!)。这样把不必要的临时文件保存至服务器,觉得对硬件存储的开销很大,特别是数据量大的报表的存储删除。 请问大家公司里对于 restful 接口下载都是这么实现的吗?个人觉得百害而无一利啊。。。
1
cway 2019-05-15 16:00:07 +08:00
难道这样可以断点续下?不知道,不清楚,有的公司 mvc 上都没返回值都是 void 用 HttpServletResponse 返回
|
2
Luckyray 2019-05-15 16:01:08 +08:00
安全性?
|
3
gz911122 2019-05-15 16:02:03 +08:00
是的 没错
1 不是上传到服务器,是上传到 cdn 之类的专门的地方 2 不确定你指的直接下载指的是什么意思,如果是指的在 service 跑的服务器上做上传下载的话,一是太占带宽,贵而且影响实时性能,二是上传上去之后如果其他地方 or 之后再需要的话从 cdn 获取即可,速度快且对服务器无负担 |
5
index90 2019-05-15 16:19:19 +08:00
搞清楚什么是动态资源,什么是静态资源。
如果文件是一次生成多次下载的,这样做没问题。参考一下你怎么用百度网盘共享文件的。 如果文件是动态生成的,可能下一秒文件就不一样了,那它就是动态资源,需要接口直接返回二进制流。 |
6
mooncakejs 2019-05-15 16:37:42 +08:00
先生成后下载很合理啊。
1 一次生成多次下载,断点续传,缓存控制。 2 IO 隔离,生成服务器不用承担下载到开销。 |
7
Vegetable 2019-05-15 17:25:54 +08:00
我问一下,是不是这样
1.**前端**根据接口数据生成 EXCEL 2.上传到服务器,服务器返回下载地址 3.前端调用下载 如果是这样的话,那我估计真的是不会,这个设计问题很大. 第一次做类似需求之前,我也以为前端不能直接生成下面保存到本地,实际上是可以的.所以我现在设计的报表下载只有两个方向 - 前端直接根据开放接口请求数据,自己塞到表里,保存到本地. - 前端发送过滤条件,后端直接在内存里生成 EXCEL 之后不保存直接返回.这个对资源的消耗比较不可控,所以在筛选条件上往往做一下限制,避免运营大神一次下全表. 其他的办法也有,但是我司业务体量目前不需要专门跑个 worker 去异步处理,所以就这两种就行了. 但是无论如何万万不会有前端生成再上传下达一次的设计. |
8
Vegetable 2019-05-15 17:27:12 +08:00
*下面 => 文件
|
9
oneisall8955 2019-05-16 00:02:34 +08:00 via Android
两种都可以,看需求咯~之前做的前后端分离或者单体应用,两个方式都可以的,两个都做过
|
10
unco020511 2019-05-16 11:39:40 +08:00
我们以前好像也是这样,因为有专门的资源服务器
|
15
Breadykid OP @mooncakejs 一次生成多次下载确实需要这样做,不过现在功能都是动态报表下载,一次生成只有一次下载,我觉得很浪费资源
|
16
Breadykid OP @unco020511 他们没有呢,就一个服务器- -
|