V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
pimin
V2EX  ›  问与答

上传一个文件,处理之后返回下载链接,怎么处理比较好?

  •  
  •   pimin · 2016-04-30 15:12:38 +08:00 · 1690 次点击
    这是一个创建于 3148 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:上传文件,处理之后返回新文件下载链接

    文件都比较小,体积普遍在 1M 以内.

    我考虑的两种处理方式

    • 上传之后直接处理,处理之后返回下载链接.
    • 上传之后返回上传成功,前端轮询文件的 MD5 值作为下载链接

    要用 js 获取文件 MD5,需要 IE10+,win7 默认 IE9 一般情况下要兼容嘛
    处理之后返回下载链接,我在服务端试了 Sleep(3)返回模拟.

    只是个人练手项目,两种方式区别不大.不支持 IE9 其实也没关系.
    因为是学习阶段,所以想了解清楚点.更多按照正式项目来考虑问题.
    说好学 Python 的,但是发现前端不处理好的话强迫症什么都不想写了.
    所以就一起看了,不知道是不是不够专注.
    我这种情况是继续看会前端看后端,还是完全不理前端比较好.

    7 条回复    2016-04-30 21:15:45 +08:00
    bdbai
        1
    bdbai  
       2016-04-30 16:24:41 +08:00 via Android   ❤️ 1
    考虑到文件不大,可以等处理完再返回结果。其实大文件也应该这样处理,否则出错的话文件就很尴尬了。另外轮询并不是一个好的解决方法。
    k9982874
        2
    k9982874  
       2016-04-30 17:59:19 +08:00 via iPhone
    直接用用户唯一 id+时间戳+文件在服务器上的完整路径做 md5 生成链接啦,根本不管上传是否成功啦,最后不要相信任何用户端得出的数据啦。
    pimin
        3
    pimin  
    OP
       2016-04-30 18:20:29 +08:00 via Android
    @bdbai
    我这里考虑的是怎么优雅的通知客户端,文件我处理好了,你来下载吧!
    并没有信任问题(O_O)
    bdbai
        4
    bdbai  
       2016-04-30 19:02:54 +08:00 via Android   ❤️ 1
    @pimin 服务端推送?长轮询或者 WebSocket
    pimin
        5
    pimin  
    OP
       2016-04-30 19:20:45 +08:00
    @bdbai
    啊哈,我想 @2 楼的
    第一种方案我觉得就是长连接了
    post 之后服务端先处理一直不返回,处理好了再返回,客户端收到了之后再用 js 更新按钮.
    bdbai
        6
    bdbai  
       2016-04-30 19:35:03 +08:00 via Android
    @pimin 1 楼也是这个意思
    oott123
        7
    oott123  
       2016-04-30 21:15:45 +08:00 via Android
    你这重点是处理是吧。
    首先上传,上传完成后返回文件唯一 ID 。
    然后问题就变成了服务器推数据的问题。
    然后你就有一万种方法解决这个问题了。(轮询,长连接, websocket , socket.io …)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2612 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 14:56 · PVG 22:56 · LAX 06:56 · JFK 09:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.