簡體   English   中英

Laravel:無法在 Storage::url() 上可視化圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM