文件下载 - php如何直接将远程获取的文件发送给ajax请求来下载?
高洛峰
高洛峰 2017-04-11 10:25:24
[PHP讨论组]

我通过ajax请求php下载一个文件,php需要先远程下载该文件,再将该文件发送给浏览器,并使浏览器下载此文件。

在常规的php发送文件的方法中,需要先把文件存在服务端的硬盘上,然后通过readfile($filePath);来把文件发送给浏览器下载。

这样的实现我做出来了,但现在我想试试不把php下载的文件保存在硬盘里,而是直接发送给浏览器。但这样又不会触发浏览器下载。

现在的示例代码如下:

    // 获取图片
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $_GET["url"]);
    curl_setopt($ch, CURLOPT_REFERER, "");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $cexecute = curl_exec($ch);
    curl_close($ch);

    //设置header
    header('Content-Type: image/webp');
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header('Content-Length:'.strlen($cexecute));

    // 输出图片
    echo $cexecute;

不过这样不行。这样输出图片的话,图片数据只会被保存在ajax的responseText里面,不会触发浏览器下载。

不知道有办法实现这个想法吗?谢谢大家~ ^_^

ps:如果不使用ajax,而是将这个php+参数的url作为iframe的src的话,是可以触发文件下载的。但是这样一来没法监控iframe的加载状况(比如iframe的onload事件不会触发),因此也没有采用。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(0)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号