首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

关于 restful 接口的导出下载疑问

  •  
  •   Breadykid · 161 天前 · 1230 次点击
    这是一个创建于 161 天前的主题,其中的信息可能已经有所发展或是发生改变。

    到新公司几个月,发现好多奇怪的实现。 比如他们的生成报表下载文件不是直接下载,而是先上传到服务器上,接口返回服务器上的文件地址,本以为他们需要文件归档或者备份,然而明确需求后只是即时生成下载,运维还特地写了定时删除文件的脚本。 询问了一下开发同事,发现他们习惯于这么实现,甚至不太会直接下载的实现方式(惊了个呀!)。这样把不必要的临时文件保存至服务器,觉得对硬件存储的开销很大,特别是数据量大的报表的存储删除。 请问大家公司里对于 restful 接口下载都是这么实现的吗?个人觉得百害而无一利啊。。。

    17 回复  |  直到 2019-05-16 13:20:02 +08:00
        1
    cway   161 天前
    难道这样可以断点续下?不知道,不清楚,有的公司 mvc 上都没返回值都是 void 用 HttpServletResponse 返回
        2
    Luckyray   161 天前
    安全性?
        3
    gz911122   161 天前
    是的 没错

    1 不是上传到服务器,是上传到 cdn 之类的专门的地方
    2 不确定你指的直接下载指的是什么意思,如果是指的在 service 跑的服务器上做上传下载的话,一是太占带宽,贵而且影响实时性能,二是上传上去之后如果其他地方 or 之后再需要的话从 cdn 获取即可,速度快且对服务器无负担
        4
    gz911122   161 天前
    @gz911122 补充一下,我觉得这跟 restful 与否没有任何关系
        5
    index90   161 天前
    搞清楚什么是动态资源,什么是静态资源。
    如果文件是一次生成多次下载的,这样做没问题。参考一下你怎么用百度网盘共享文件的。
    如果文件是动态生成的,可能下一秒文件就不一样了,那它就是动态资源,需要接口直接返回二进制流。
        6
    mooncakejs   161 天前
    先生成后下载很合理啊。
    1 一次生成多次下载,断点续传,缓存控制。
    2 IO 隔离,生成服务器不用承担下载到开销。
        7
    Vegetable   161 天前
    我问一下,是不是这样

    1.**前端**根据接口数据生成 EXCEL
    2.上传到服务器,服务器返回下载地址
    3.前端调用下载

    如果是这样的话,那我估计真的是不会,这个设计问题很大.

    第一次做类似需求之前,我也以为前端不能直接生成下面保存到本地,实际上是可以的.所以我现在设计的报表下载只有两个方向

    - 前端直接根据开放接口请求数据,自己塞到表里,保存到本地.
    - 前端发送过滤条件,后端直接在内存里生成 EXCEL 之后不保存直接返回.这个对资源的消耗比较不可控,所以在筛选条件上往往做一下限制,避免运营大神一次下全表.

    其他的办法也有,但是我司业务体量目前不需要专门跑个 worker 去异步处理,所以就这两种就行了.
    但是无论如何万万不会有前端生成再上传下达一次的设计.
        8
    Vegetable   161 天前
    *下面 => 文件
        9
    oneisall8955   161 天前 via Android
    两种都可以,看需求咯~之前做的前后端分离或者单体应用,两个方式都可以的,两个都做过
        10
    unco020511   160 天前
    我们以前好像也是这样,因为有专门的资源服务器
        11
    Breadykid   160 天前
    @cway 完全没有断点续传的考虑,就是动态生成下载,还存到服务器上去。。。
        12
    Breadykid   160 天前
    @Luckyray 什么的安全?下载文件内容的安全 ?
        13
    Breadykid   160 天前
    @gz911122 他们完全没有 cdn 呢,就是在工程所在服务器的某个文件夹里。。。
        14
    Breadykid   160 天前
    @index90 这个文件就是动态生成的。。。
        15
    Breadykid   160 天前
    @mooncakejs 一次生成多次下载确实需要这样做,不过现在功能都是动态报表下载,一次生成只有一次下载,我觉得很浪费资源
        16
    Breadykid   160 天前
    @unco020511 他们没有呢,就一个服务器- -
        17
    Breadykid   160 天前
    @Vegetable 同意同意,握爪握爪
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   974 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 21:43 · PVG 05:43 · LAX 14:43 · JFK 17:43
    ♥ Do have faith in what you're doing.