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

2014-09-19 12:03:51 +08:00
 l1905
3806 次点击
所在节点    PHP
9 条回复
skybr
2014-09-19 12:08:11 +08:00
别想复杂了, 用隐藏的iframe不好么?

权限通过动态页用x-sendfile传递文件让浏览器直接下载, 权限不通过子框架调用parent的javascript报警告.
qiayue
2014-09-19 12:10:03 +08:00
你用新打开页面去做,判断完成之后下载,然后自动关闭新页面
jsonline
2014-09-19 12:32:21 +08:00
Show me your code. jsbin.com
l1905
2014-09-19 12:49:04 +08:00
@jsonline http://jsbin.com/cuyojojasoju/4/edit 简单的把代码摘出来了
l1905
2014-09-19 12:52:22 +08:00
@qiayue 可业务需求是在当前页面用ajax实现
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
2014-09-19 13:02:16 +08:00
@l1905
1 你没有在 jsbin.com 插入 jQuery
2 代码我放到上面了,插入 jQuery 什么的自己搞定。
vincenting
2014-09-19 22:33:56 +08:00
1. ajax 下载文件?不太懂,为何不判断权限,如果没有权限就不给出下载链接,如果有权限才给出下载链接
2. 点击下载链接后再次验证权限,想到有如下做法[根据规模选择]:
a. 生成一个一段时间(例如 10s)的 token 放在 redis 里面,然后跳转至下载链接;然后使用 nodejs 代理或者 lua 脚本结合 Nginx 的方式,查看token 是否有效,有效才开始下载。
b. 静态云服务器应该都有类似的功能,生成一个一次性/临时有实效的下载地址,避免暴露真实地址。
ryd994
2014-09-19 23:45:32 +08:00
再再简单,也就是ajax生成链接然后隐藏iframe下载。
如果你想ajax直接返回内容,那服务端就会很麻烦,而且效率也低。
先生成链接,下载交给静态服处理,动态这边效率要高得多。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/134441

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX