无法从存储laravel 5获取图像

mar*_*ane 6 php image laravel

嘿所以我试图把我的图像放到我的索引上的幻灯片中.保存图像storage/app,然后从我的数据库中恢复路径的其余部分.

我设法在<img src>标签上输出正确的路径,标题得到的输出就像它应该的那样,但图像不会.

我从控制器发送和数组,然后在我的视图中循环它:

控制器:

public function index()
{
    $projects = Project::all()->take(4);
    return view('index' , compact('projects'));

}
Run Code Online (Sandbox Code Playgroud)

索引视图

@foreach($projects as $project)
{{$storagePath  = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix()}}
<li><img src="{{$storagePath.$project->fetchMedia->first()->public_name}}"    title=" {{$project->name}}"></li>
        @endforeach
Run Code Online (Sandbox Code Playgroud)

HTML输出是正确的路径:"/ home /vagrant/project/storage/app/projects/Domaa6.jpg"

但它没有显示图像.

我已经尝试使用HTML :: image帮助程序,但也没有成功.

有没有办法让它像它一样工作,还是我需要创建一个新的控制器来操纵我的图像?

这fetchMedia是我的模型上的函数返回我的媒体.

public function fetchMedia()
{
    return $this->hasMany('App\Media');
}
Run Code Online (Sandbox Code Playgroud)

Eme*_*bah 11

您尝试在存储目录中执行的操作是不可能的,但只能在公共目录中执行,同时将路径或URL暴露给您的laravel存储目录会产生一些漏洞及其不良做法

但是有一种方法可以解决它:

首先,您需要一个Image包来在引用某个路径时动态生成图像,我建议使用干预/图像,它有许多方法可以使图像管理变得轻而易举.

要实现此目的,请执行以下步骤:

1.安装干预图像:

将干预图像添加到你的composer.json和do composer update

"require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.1.*",
        "intervention/image": "2.*",
        "intervention/imagecache": "2.*"

        .....
Run Code Online (Sandbox Code Playgroud)

在$ providers数组中,添加此包的服务提供者.

'Intervention\Image\ImageServiceProvider'
Run Code Online (Sandbox Code Playgroud)

将此包的外观添加到$ aliases数组中.

'Image' => 'Intervention\Image\Facades\Image"

在Laravel 5中配置干预图像

$ php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5"
Run Code Online (Sandbox Code Playgroud)

在Laravel 4中发布配置

$ php artisan config:publish intervention/image
Run Code Online (Sandbox Code Playgroud)

有关更多安装细节,请访问https://github.com/Intervention/image

安装干预/图像后,您可以执行以下操作:

Image::make($path=storage_path('stock-photos/image1.jpg'));

2.设置将处理图像请求的路由

Route::get('stock-photos/{image}', function($image){

    //do so other checks here if you wish

    if(!File::exists( $image=storage_path("stock-photos/{$image}") )) abort(404);

    return Image::make($image)->response('jpg'); //will ensure a jpg is always returned
});
Run Code Online (Sandbox Code Playgroud)

3.然后在视图中您可以执行以下操作:

@foreach($projects as $project)
    <li>
        <img src="{{url('stock-photos/'. $project->fetchMedia->first()->public_name)}}" title="{{$project->name}}">
    </li>
@endforeach
Run Code Online (Sandbox Code Playgroud)