我想把文件放在非公开的存储文件夹里,我想在前面展示。这将是防止未经授权访问的安全措施。我知道我可以使用
readfile
功能但它不起作用,例如:
readfile('/private/something.jpg')
你能告诉我代码或其他方法来显示非公共存储文件夹中的文件吗?
使用
disk
门面上的Storage
方法来指定要使用的磁盘。
您可以使用以下代码:
$fileContents = Storage::disk('local')->get('my_directory/file.txt');
注意您必须指定要使用的磁盘,因为默认情况下 Laravel 使用允许访问公共文件的
public
磁盘。
在 Laravel 中,您可以将文件存储在非公共存储文件夹中,并通过使用 Storage facade 在前端安全地显示它们。'
分步指南: 第 1 步:我们正在创建一个名为“private”的新磁盘,它将文件存储在位于 storage/app/private 的非公共目录中。我们还将可见性设置为“私有”,这样就无法直接从网络访问这些文件。
'disks' => [
// ...
'private' => [
'driver' => 'local',
'root' => storage_path('app/private'),
'url' => env('APP_URL').'/storage',
'visibility' => 'private',
],
],
第二步: 使用 putFileAs() 方法存储文件:
$file = $request->file('file');
$path = $file->storeAs('private', $file->getClientOriginalName(), 'private');
第三步: 为文件生成一个临时 URL:
$url = Storage::disk('private')->temporaryUrl($path, now()->addMinutes(10));
<a href="{{ $url }}">Download File</a>