php - 获取/读取 laravel 5.8 存储非公共文件夹文件以查看?
问题描述
尝试从我的视图访问“storage/app/folder1/a.png”
public function viewStorageFiles()
{
$fileFullPath = Storage::disk('local')->path('folder1/a.png');
$fileUrl = Storage::disk('local')->url('app/folder1/a.png');
$storage_path = storage_path('app/folder1/a.png');
return view('email.fileDownload')->with([
'fileFullPath' => $fileFullPath,
'fileUrl' => $fileUrl,
'storage_path' => $storage_path,
]);
}
在视图中:email.fileDownload
<div>
<p> asset($fileUrl) ==> {{asset($fileUrl)}}</p>
<img src="{{asset($fileUrl)}}"/>
</div>
<div>
<p> url($fileUrl) ==> {{url($fileUrl)}}</p>
<img src="{{url($fileUrl)}}"/>
</div>
<div>
<p> storage_path($fileUrl) ==> {{storage_path($fileUrl)}}</p>
<img src="{{storage_path($fileUrl)}}"/>
</div>
解决方案
这个问题可能有很多答案!
您可以create a symbolic link from "public/storage" to "storage/app/public"
使用以下命令:
php artisan storage:link
上面的命令会将您的目录映射storage/app/public
到public
目录。
现在让我们考虑您的目录中有user1.jpg
和user2.jpg
文件storage/app/public
,您可以通过以下方式访问它们:
http://your-domain.com/storage/user1.jpg
http://your-domain.com/storage/user2.jpg
*根据您的评论更新了我的答案:*
您可以从受某些中间件保护的路由返回文件响应!
例如 - 以下路由从storage/app/uploads
无法公开访问的目录返回文件响应:
Route::get('storage/{file}', function ($file) {
$path = storage_path('app' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . $file);
return response()->file($path);
});
无论如何,您都可以保护上述路线并在您的视图中使用它..
我希望这有帮助..
推荐阅读
- java - 如何中途停止异步任务
- java - Deeplearning4j - 在学习 WordVectors 时不能使用 UIServer?
- sql - 为所有组合选择最大日期
- apache-kafka - 如果您使用 Apache Kafka 作为严格的消息代理,您是否可以将所有保留条目设置为最低限度?
- c# - 在 C# 中使用 Unicode 值
- html - CSS 侧边菜单内容分层在下面
- php - laravel 5.5 - 未定义的变量:@foreach 循环中的产品
- java - 如何将过滤后的流数组输出收集为列表
- android - 方向键导航不会转到下一个焦点项目
- apache - 如何使用 Docker 容器在前端和后端之间进行 REST 调用