获取存储路径的正确 URL (Laravel)

时间:2021-03-09 09:00:39

标签: php laravel path symlink laravel-7

我正在尝试获取我在存储文件夹中托管的文件的完整 url,但我无法正确获取。我使用 Laravel 7。

我想获取的网址是:

https://www.example.com/panel1/storage/app/folder/file.txt

我尝试了许多不同的方法,但始终没有找到正确的地址。例如:

$url = asset('storage/app/folder/file.txt');
https://www.example.com/panel1/public/storage/app/folder/file.txt

$url = storage_path('app/folder/file.txt');
https://www.example.com/var/www/panel1/storage/app/folder/file.txt

$url = Storage::disk('local')->path('folder');
https://www.example.com/var/www/panel1/storage/app/storage/app/folder/file.txt

$url = Storage::url('app/folder/file.txt');
https://www.example.com/storage/app/folder/file.txt

我已阅读有关创建从存储文件夹到公共文件夹的符号链接的选项,但我担心任何用户都可以访问这些文件,因为它们是私有的,并且它们的内容只能由所有者访问文件。

有人知道我做错了什么以及如何纠正吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果文件是私有的,则您无法直接为任何人创建指向它们的 URL。如果您不想公开访问它们,则必须以某种方式代理它们:

考虑这个示例代码:

Route::get('privateFile/{filepath}', function ($filepath) {
    // Check if user can access file somehow
    return response->download(Storage::disk('local')->path('folder'));
})->where('filepath', '.*')->middleware('auth')->name('privateFileDownload');

然后生成指向您要执行的文件的 URL:

route('privateFileDownload', [ 'filepath' => 'app/folder/file.txt' ]);

这样你就可以控制谁可以下载哪些文件

相关问题