【问题标题】:Download file not working well in safari with PHP使用 PHP 在 safari 中下载文件无法正常工作
【发布时间】:2021-03-03 16:51:30
【问题描述】:

以下代码适用于所有浏览器,但扩展程序未在 safari 中显示。 也许是内容类型问题?

public function CheckRoutingURLAction($filename){
    $filename = 'https://media3.s-nbcnews.com/j/newscms/2019_41/3047866/191010-japan-stalker-mc-1121_06b4c20bbf96a51dc8663f334404a899.fit-2000w.JPG';

try{
        $content = file_get_contents($filename, true, stream_context_create(array(
            "ssl" => array(
                "verify_peer" => false,
                "verify_peer_name" => false,
            ),)));
    }
    catch (\Throwable $e){
        $logger = $this->get('logger');
        $logger->err($e->getMessage());
        throw new NotFoundHttpException('Page not found');
    }

    $response = new Response();
    $response->headers->set('Content-Type', 'mime/type');
    $response->headers->set('Content-Disposition',
        'attachment;filename=Noman.png'));
    $response->setContent($content);
    return $response;
}

【问题讨论】:

    标签: php safari cross-browser


    【解决方案1】:

    请试试这个代码。我总是用这个来下载外部文件。

    $filename = 'https://media3.s-nbcnews.com/j/newscms/2019_41/3047866/191010-japan-stalker-mc-1121_06b4c20bbf96a51dc8663f334404a899.fit-2000w.JPG';
    
    $file = basename($filename);
    
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename=$file");
    header("Content-Transfer-Encoding: binary");
    
    readfile($filename);
    

    【讨论】:

    • 我不能给出基本名称,名称应该是带有文件扩展名的随机数,我有不同的文件可能是,csv,jpeg,pdf,txt,.doc 等所以解决方案应该是通用的生成随机数和附件扩展名
    【解决方案2】:

    我得到了答案,它适用于我的所有浏览器:)

            $response->headers->set('Content-Description',' File Transfer');
            $response->headers->set('Content-Disposition',' attachment; filename=' . $quoted);
            $response->headers->set('Content-Transfer-Encoding',' binary');
            $response->headers->set('Connection',' Keep-Alive');
            $response->headers->set('Expires',' 0');
            $response->headers->set('Cache-Control',' must-revalidate, post-check=0, pre-check=0');
            $response->headers->set('Pragma',' public');
            $response->headers->set('Content-Length', $size);
            $response->headers->set('Content-Type', mime_content_type($filename));
            $response->setContent($content);
            return $response;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多