使用 PHP 在 Safari 浏览器中下载文件效果不佳

Download file not working well in safari with PHP

以下代码适用于所有浏览器,但扩展程序未在 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;
}

请尝试此代码。我一直用这个来下载外部文件。

$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);

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

        $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;