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

情况是页面点击下载文件,ajax 请求后台,判断用户是否登陆,积分是否足够, 然后,给出要下载的 url 地址,下载文件。可以 我想要的是如果都能满足情况,在 ajax 里就能去下载这个文件,但实际情况是不可以这样的。诸君支招

  •  
  •   l1905 · 2014-09-19 12:03:51 +08:00 · 3714 次点击
    这是一个创建于 3515 天前的主题,其中的信息可能已经有所发展或是发生改变。
    9 条回复    2014-09-19 23:45:32 +08:00
    skybr
        1
    skybr  
       2014-09-19 12:08:11 +08:00
    别想复杂了, 用隐藏的iframe不好么?

    权限通过动态页用x-sendfile传递文件让浏览器直接下载, 权限不通过子框架调用parent的javascript报警告.
    qiayue
        2
    qiayue  
       2014-09-19 12:10:03 +08:00
    你用新打开页面去做,判断完成之后下载,然后自动关闭新页面
    jsonline
        3
    jsonline  
       2014-09-19 12:32:21 +08:00
    Show me your code. jsbin.com
    l1905
        4
    l1905  
    OP
       2014-09-19 12:49:04 +08:00
    @jsonline http://jsbin.com/cuyojojasoju/4/edit 简单的把代码摘出来了
    l1905
        5
    l1905  
    OP
       2014-09-19 12:52:22 +08:00
    @qiayue 可业务需求是在当前页面用ajax实现
    jsonline
        6
    jsonline  
       2014-09-19 13:01:24 +08:00
    $('.downAttach').click(function(e) {
    $.get("http://run.jsbin.com/runner?m=activity&c=index&a=add_apply_attach&id=<?php echo $adata['id'];?>" )
    .always(function(msg) {

    location.href = 'http://baidu.com';
    alert('done!')


    });
    });
    jsonline
        7
    jsonline  
       2014-09-19 13:02:16 +08:00
    @l1905
    1 你没有在 jsbin.com 插入 jQuery
    2 代码我放到上面了,插入 jQuery 什么的自己搞定。
    vincenting
        8
    vincenting  
       2014-09-19 22:33:56 +08:00   ❤️ 1
    1. ajax 下载文件?不太懂,为何不判断权限,如果没有权限就不给出下载链接,如果有权限才给出下载链接
    2. 点击下载链接后再次验证权限,想到有如下做法[根据规模选择]:
    a. 生成一个一段时间(例如 10s)的 token 放在 redis 里面,然后跳转至下载链接;然后使用 nodejs 代理或者 lua 脚本结合 Nginx 的方式,查看token 是否有效,有效才开始下载。
    b. 静态云服务器应该都有类似的功能,生成一个一次性/临时有实效的下载地址,避免暴露真实地址。
    ryd994
        9
    ryd994  
       2014-09-19 23:45:32 +08:00   ❤️ 1
    再再简单,也就是ajax生成链接然后隐藏iframe下载。
    如果你想ajax直接返回内容,那服务端就会很麻烦,而且效率也低。
    先生成链接,下载交给静态服处理,动态这边效率要高得多。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2387 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:35 · PVG 19:35 · LAX 04:35 · JFK 07:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.