phpexcel导出到输出流的文件,如何兼容各个平台?

最近在做企微开发,碰到文件导出问题有点头疼,浏览器还好,但是碰到手机的话,就有很多问题,安卓微信里面直接打不开,苹果微信里面打开是空文件。下面是代码,downloadHeaders函数主要处理中文文件名问题

function downloadHeaders($filename, $charset = 'UTF-8')
{
    // 兼容各浏览器下载文件名乱码问题
    if (preg_match("/MSIE/", $_SERVER["HTTP_USER_AGENT"])) {
        $filename = urlencode($filename);
        $filename = str_replace("+", "%20", $filename);// 替换空格
        $attachment = "attachment; filename=\"{$filename}\"; charset={$charset}";
    } else if (preg_match("/Firefox/", $_SERVER["HTTP_USER_AGENT"])) {
        $attachment = 'attachment; filename*=utf-8\'\'' . $filename;
    } else if (preg_match("/(Safari)|(iphone)|(ipad)/i", $_SERVER["HTTP_USER_AGENT"])) {
        $filename = rawurlencode($filename); // 注意:rawurlencode与urlencode的区别
        $attachment = 'attachment; filename*=utf-8\'\'' . $filename;
    } else {
        $attachment = "attachment; filename=\"{$filename}\"; charset={$charset}";
    }

    return $attachment;
}



    header('Pragma: public');
    header('Expires: 0');
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
    header('Content-Type:application/force-download');
    header("Content-Type:application/vnd.ms-excel");
    header('Content-Type:application/octet-stream');
    header('Content-Type:application/download');
    header("Content-Disposition:" . downloadHeaders("测试.xlsx"));
    header('Content-Transfer-Encoding:binary');
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2
thebestxt

是打算直接把二进制输出出来吗?我们做的导出都是在服务器上生成文件,返回给前端的就是一个地址,这样就没有客户端跨平台的问题了。

2年前 评论

可以用内网把文件分片上传到oss之类的,返回前端一个下载地址

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!