[英]Laravel: Can't visualize an image on Storage::url()
首先,我將圖像上傳到Storage::
在 controller 中,如下所示:
$ranker = Ranker::create([ ... ]);
if ($request->file('file')) {
$filename = Storage::put('ranker', $request->file('file');
$ranker->image_url = $filename;
$ranker->save();
}
所以這是有效的,在數據庫中,我在適當的字段中得到了 url,例如: ranker/v14rzsqJjlJIEYG2Cd22l1MLxeNPd0hGI0rvLjrf.png
。 如果我 go 到\app\Storage\app\ranker
我看到了文件,並且它已正確上傳。
現在,當我想渲染文件時,我會做一些簡單的事情:
<img src="{{ Storage::url($ranker->image_url) }}" ... >
src 正確地說: /storage/ranker/v14rzsqJjlJIEYG2Cd22l1MLxeNPd0hGI0rvLjrf.png
但什么都不顯示。 如果我 go 到http://server/storage/ranker/v14rzsqJjlJIEYG2Cd22l1MLxeNPd0hGI0rvLjrf.png
我得到一個 404
有任何想法嗎?
Storage 文件夾不是可公開訪問的文件夾,因此您要么需要將圖像保存在 public 目錄中,要么通過在 cli 中運行以下 artisan 命令將 storage public 文件夾鏈接到 public 文件夾。
php artisan storage:link
然后在保存時需要通過默認選擇公共磁盤或像這樣選擇磁盤將其添加到公共文件夾
Storage::disk('public')->put('ranker', $request->file('file'));
然后是 output:-
{{ Storage::disk('public')->url($ranker->image_url) }}
正如 ColinMD 所說,存儲文件夾不是可公開訪問的文件夾。
除了他的解決方案之外,您還可以在 routes/web.php 中創建一條路線
Route::get('/images/{filename}', [ImagesController::class, 'show'])->name("images");
用 function 制作一個 ImagesController 顯示如下:
public function show($filename) {
$content = Storage::get("ranker/$filename");
return response($content)->header('Content-Type', 'image/jpeg');
}
通過這種方式,您可以將文件保存在應用程序的私有部分,只需通過 url 調用它們
https://server/images/filename
或者在刀片文件中
{{ Route('images', ['filename']) }}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.