如何使用 Laravel 强制下载 png 文件?

Posted

技术标签:

【中文标题】如何使用 Laravel 强制下载 png 文件?【英文标题】:How to force png file download with Laravel? 【发布时间】:2021-11-13 08:22:28 【问题描述】:

我已经尝试过使用以下代码。但下载文件已损坏,显示 “我们不支持这种文件格式!”

 $fileName = $request->fileName;
  // $file_url = public_path() . "/uploads/$fileName";
  $file_url = "https://helloworld.net". "/uploads/$fileName";
  header('Content-Type: application/octet-stream');
  header("Content-Transfer-Encoding: Binary");
  header("Content-disposition: attachment; filename=\"" . 
  basename($file_url) . "\"");
  readfile($file_url);

【问题讨论】:

为什么不使用文件路径而不是文件url? 【参考方案1】:

你可以像下面这样使用,它总是有效的

public function download($request)

    $fileName = $request->fileName;

    $file_url = "https://helloworld.net". "/uploads/$fileName";



    if (file_exists($file_url)) 
        $headers = [
            'Content-Type' => 'application/pdf',
        ];
        return response()->download($file_url, "$fileName", $headers);
    
    else
        session()->flash('message','Image does not exist');
        return back();
    


【讨论】:

抱歉,文件已损坏! @Prera​​na,我下载了图片,上面的代码在我的所有项目中【参考方案2】:

既然你在使用 laravel,为什么不使用它的工具

public function download($request)
    $fileName = $request->fileName;
    $filePath = public_path("/uploads/$fileName");
    if (file_exists($filePath)) 
        return response()->download($filePath);
    

【讨论】:

它有效。但同样的问题文件以某种方式损坏。显示“我们不支持这种文件格式!” @Prera​​na 你试图用什么打开它,在你的浏览器中打开它(拖放) 是的,已经尝试过了。不工作

以上是关于如何使用 Laravel 强制下载 png 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 在存储中显示 PDF 文件而不强制下载?

Laravel - 在存储中显示 PDF 文件而不强制下载?

在 Laravel 4.2 中强制下载 .xls 文件

正确设置 HTTP 标头以强制缓存 JS、CSS 和 PNG 文件

如何强制 Laravel 项目对所有路由使用 HTTPS?

如何使用 laravel 和 vuejs 下载文件