2016-08-30 10 views
1

ユーザーはhttp://laravel.dev/123.jpgのようなURLを使って画像にアクセスできないようにしたいと思います。したがって、私はすべての画像を格納ディレクトリに保存します。それは、パブリックフォルダから外部に格納されているが、このLaravel 5とBladeで安全な画像を表示

public function show($id) { 
    $img = storage_path('my_images/123.jpg'); 
    return response()->download($img, null, [], null); 
} 

画像のようなコントローラと

が正しく、Laravel 5で表示されます。

これまでのところ大丈夫ですが、Bladeを使用して画像をさらに詳細に囲みたいと思います。画像の位置が意図をイストた(公にアクセスできないため、そのために私コントローラこの

public function show($id) { 
    $picture = Picture::find($id); 
    $img = storage_path('my_images/123.jpg'); 
    return view('pictures.show', array('picture' => $picture, 'img' => $img)); 
} 

ビュー、明らかに動作しません

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Picture {{ $picture->id }}</title> 
    </head> 
    <body> 
     <h1>Picture {{ $picture->id }}</h1> 
     <ul> 
      <li>Name: {{ $picture->name }}</li> 
      <li>Description: {{ $picture->description }}</li> 
     </ul> 
     <img src="{{ $image }}"> 
    </body> 
</html> 

このようなように見えます)。

<img src="{{ $image }}">の代わりに何を使用してこの作業を行う必要がありますか?

答えて

1

最初のコントローラのURLを呼び出すようにsrc属性を設定してください。これは役に立ちます。

つまり、image.showというコードを持つルートがあるとします。お使いのブレードで

ので
public function show($id) { 
    $img = storage_path('my_images/123.jpg'); 
    return response()->download($img, null, [], null); 
} 

:仕事をしていません

<img src={{route("image.show",$img_object)}}"> 
+0

!ありがとうございました。 このソリューションで私があまり好きでないのは、クライアントが実際にサーバーを2回呼び出すということだけです。ページ全体で初めて、イメージを取得するのに2回目です。 ソースを提供する代わりに、画像を ''のような種類のバイナリとして転送する方法はありませんか? – Steevie

+0

実際にあなたのページ(images、css、js)でホストしているリソースの場合、クライアントはそれぞれ別のサーバー要求を行います。 –

+0

ありがとう! – Steevie

関連する問題