実現したいこと
Laravelで、画像をアップロードして、その画像をブラウザ上で表示させようとしています。
現在の問題点
ローカル上の storage/app/public/ には問題なく画像がアップロードされましたが、
ブラウザ上では画像が表示されません。
Laravelはstorage/app/public/ 配下の画像にアクセスが許可されていないということでしたので、シンボリックリンクを張ろうと以下のコマンドを打つとエラーメッセージが表示されてしまいました。
エラーの解決策を教えていただけますと幸いです。
workspace
1$ php artisan storage:link
エラーメッセージ
ErrorException symlink(): Protocol error at vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:263 259| */ 260| public function link($target, $link) 261| { 262| if (! windows_os()) { > 263| return symlink($target, $link); 264| } 265| 266| $mode = $this->isDirectory($target) ? 'J' : 'H'; 267| +16 vendor frames 17 artisan:37 Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
該当のソースコード
HomeControllerphp
1<?php 2 3namespace App\Http\Controllers; 4 5use App\User; 6use Illuminate\Http\Request; 7 8class HomeController extends Controller 9{ 10 11 public function index() 12 { 13 return view('home'); 14 } 15 16 public function upload(Request $request) 17 { 18 $this->validate($request, [ 19 'file' => [ 20 'required', 21 'file', 22 'image', 23 'mimes:jpeg,png', 24 ] 25 ]); 26 27 if ($request->file('file')->isValid([])) { 28 $path = $request->file->store('public'); 29 return view('home')->with('filename', basename($path)); 30 } else { 31 return redirect() 32 ->back() 33 ->withInput() 34 ->withErrors(); 35 } 36 } 37} 38
homebladephp
1@if ($errors->any()) 2<ul> 3 @foreach($errors->all() as $error) 4 <li>{{ $error }}</li> 5 @endforeach 6</ul> 7@endif 8 9<form action="{{ url('upload') }}" method="POST" enctype="multipart/form-data"> 10 11 @isset ($filename) 12 <div> 13 <img src="{{ asset('storage/' . $filename) }}"> 14 </div> 15 @endisset 16 17 <label for="photo">画像ファイル:</label> 18 <input type="file" class="form-control" name="file"> 19 <br> 20 <hr> 21 {{ csrf_field() }} 22 <button class="btn btn-success"> Upload </button> 23</form>
webphp
1Route::get('/', 'HomeController@index'); 2 3Route::post('/upload', 'HomeController@upload');
試したこと
・管理者権限を持ってコマンドを再度実行する
こちらを参照
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/08 03:44 編集
2020/04/14 16:39