php 如何在Laravel 9中强制下载文件?

wdebmtf2  于 2022-12-17  发布在  PHP
关注(0)|答案(2)|浏览(193)

我有一个.exe,用户必须为我网站上的某个硬件安装该. exe。我当前将此.exe存储在我的storage/app/public文件夹中,并已确保文件和文件夹都具有访问权限。
我已经运行了php artisan storage:link
目前用途:

public function Downloadfile(Request $request)
{
    Log::debug("DOWNLOADFILE");
    $path = storage_path().'\\app\\public\\'.'file.exe';
    Log::debug("Path ".$path);
    Log::debug(file_exists($path));
    
    return Storage::download($path);
}

结果如下。

文件存在,正如日志所说,但由于某种原因,当我试图下载它时,我无法这样做。

xbp102n0

xbp102n01#

storage_path()函数返回应用程序存储目录的完全限定路径。
另外,您还希望返回一个响应,例如,download方法可以生成一个响应,强制用户的浏览器下载给定路径下的文件。

public function Downloadfile(Request $request)
{
    $path = storage_path('app/public').'/'.'file.exe';

    return response()->download($path);
}
mwg9r5ms

mwg9r5ms2#

我认为你走错了路。你需要摆脱:

app/public

在Laravel config/filesystems.php中通常有这样的内容:

'public' => [
        'driver' => 'local',
        'root' => storage_path('app/public'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],

所以
公用文件夹中的“storage”符号链接是指向storage/app/public的符号链接。

php artisan storage:link

至少在我的设置中,我的个人资料照片在:public/profile-photos,这些照片的URL是:

storage/profile-photos/bIlkdsTMTJFjiBDoarcQcfxWutJ0BvktYDQ7dcjU.jpg

因此您可能需要:
C:\Usersxxx.source\repos\xxx\storage\file.exe
你只需要调整一下路径。试试看。

相关问题