2016-12-14 13 views
0

laravel 5.3を使用して、ビュー内の画像を取得しようとしています。どのように私はこれを行うことができますか? フォルダ構造:ストレージ/アプリ/ avatard保存フォルダに保存されている画像を取得する

ここではコードです:

public function storeAvatar(Request $request, $username) 
{ 
    $user = User::where('name', $username)->first(); 
    $avatar = $request->file('avatar')->store('avatars'); 

    $avatar = explode('avatars/', $avatar); 



    $user->user_setting()->updateOrCreate(
    ['user_id' => $user->id], 
    ['avatar' => $avatar[1]] 
); 

    return back(); 
} 

は、これは、画像のパスがデータベースに保存されている方法です。

/ユーザー/アバター/デフォルト。 png

答えて

4

このように、ストレージパスを直接公開することはできません。このような経路でパブリックURLを提供する必要があります。ルート/ web.php

Route::get('/avatars/{filename}', function ($filename) 
{ 
    $path = storage_path() . '/avatars/' . $filename; 

    if(!File::exists($path)) abort(404); 

    $file = File::get($path); 
    $type = File::mimeType($path); 

    $response = Response::make($file, 200); 
    $response->header("Content-Type", $type); 
    return $response; 
})->name('avatar'); 
+0

は、これは私のために働いただけのものでした私も 'php artisan storage:link'しました –

1

ビューで

<img src="{{route('avatar',$filename)}}" /> 

または

<img src="/avatars/{{$filename}}" /> 

あなたが作成できるLaravel documentationあたりとしてstorage/app/publicディレクトリにファイルを保存する場合Unix/Linuxシステム上のシンボリックリンクで、ファイルを参照できるようになります。 yはpublicディレクトリにありました。

職人コマンドを使用してシンボリックリンクを作成します。あなたの意見で

php artisan storage:link 

をあなたがして

{{ asset('storage/path/to/file.png') }} 
1

を使用してファイルを参照することができますまず

に入力することで、ストレージのリンクを作成
php artisan storage:link 

および次に

<img src={{ asset('storage/folder_name/image_name') }} /> 
0

Homesteadを使用している場合は、仮想マシンからシンボリックリンクを作成する必要があります。お使いの端末で

homestead ssh 

がプロジェクトフォルダに移動します

cd Code/YOUR_PROJECT 

今、あなたはコマンドを実行できます。

php artisan storage:link 
関連する問題