怎样解决迅雷无法下载以POST方式请求的文件的问题?

黄冠能 发布于 2015/06/09 18:07
阅读 796
收藏 0

页面中有个下载按钮,点击后会提交表单,PHP后台会根据提交的参数实时生成文件,返回文件内容。如果浏览器安装了迅雷插件,迅雷会截获这个下载的HTTP响应,然后以多线程方式去下载页面,结果只能下载一个提示访问错误之类的html页面。

大家有没有办法解决这个问题呢?

下面是一段返回文件内容的PHP代码,供参考:

$http_headers = array(
        'Content-Type' => 'application/pdf',
        'Content-Disposition' => 'attachment; filename="' .
        urlencode($form_state['values']['exam-name'] . '.pdf') . '"',
        'Content-Length' => filesize($pdf_file),
        'Cache-Control' => 'no-cache, must-revalidate', // HTTP/1.1
        'Expires' => 'Sat, 26 Jul 1997 05:00:00 GMT', // Date in the past
    );

    file_transfer($pdf_file_uri, $http_headers);



我想到的一个办法是把文件保存下来,然后把页面重定向到该文件路径,几小时内删除文件。但是这个方案的缺点是用户正在看的页面会被文件的预览页面所取代。并且页面从文件预览页面后退时会触发IE或迅雷的一些bug导致浏览器重启。

加载中
0
canghailan
canghailan

为什么不把参数放到URL里,用GET请求呢?这样应该没有什么问题吧。

黄冠能
黄冠能
文件是根据用户表单提交的选项动态生成的,参数由用户输入,无法事先构造GET参数
返回顶部
顶部