【问题标题】:How to display an storage image Laravel 5.2如何显示存储图像 Laravel 5.2
【发布时间】:2019-12-24 04:35:45
【问题描述】:

我想在我的视图上显示图像,但我收到:File not found

两个错误:

FileSystemAdapter.php 第 61 行中的 FileNotFoundException: storage/app/public/covers/teste-bravo_cover.jpg

FileSystem.php 第 386 行中的 FileNotFoundException:文件未找到 路径:storage/app/public/covers/teste-bravo_cover.jpg

但图片在正确的文件夹中:

好吧,在 Laravel 5.2 中 storage:link 不起作用。

磁盘上的图像存储 - 可以很好地存储图像

if($cover){
            dump("ok1");
            Storage::disk('public_covers')->put($covername, File::get($cover));

            $coverObject = New Cover();      

            //path com o nome do arquivo
            $coverObject->imagePath = 'storage/app/public/covers/'.$covername;
            dump($coverObject->imagePath);
        }

        //Salva a capa com o path para o arquivo
        $coverObject->save();

我的文件系统(带有“public_covers”磁盘)- 可以很好地存储图像

        'public_covers' => [
            'driver' => 'local',
            'root' => storage_path('app/public/covers'),
            'visibility' => 'public',
        ],

查看代码:(如果电影有封面,请显示)

                @if($movie->cover)
                <img src="{{route('cover.image', [$movie->cover])}}" />
                @endif

路由代码,指向控制器方法

Route::get('/movieimage/{coverId}',
[
               'as' => 'cover.image',
               'uses' => 'MovieController@getimage'
           ]
);

控制器获取图像的方法

    public function getimage($coverId){
        $movie = Cover::find($coverId);
        //dump($movie);
        $imagePath = $movie['imagePath'];

        dump($imagePath);

        $file = Storage::disk('public_covers')->get($imagePath);

        $response = Response::make($file, 200);
        return $response;     
    }

【问题讨论】:

  • 尝试使用asset helper
  • 我尝试使用&lt;img src="{{asset($movie-&gt;cover-&gt;imagePath)}}" /&gt; 在浏览器上显示正确的路径,但不会加载图像。 &lt;img src="http://localhost:8000/storage/app/public/covers/teste-bravo_cover.jpg"&gt;
  • 现在必须使用存储链接,可以回复here
  • storage:link 仅在 5.3 版本之后有效,或者不?我在运行 5.2 [Symfony\Component\Console\Exception\CommandNotFoundException] There are no commands defined in the "storage" namespace. 时收到此消息

标签: php laravel laravel-5 laravel-filesystem


【解决方案1】:

你可以试试

需要包含这个

use Illuminate\Support\Facades\Storage;

并在控制器或路由中设置

Route::get('storage/{filename}', function ($filename)
{

    $files = Storage::files('logs');  // set repo name of storage folder

    $path = storage_path('public/' . $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;
});

【讨论】:

    【解决方案2】:

    我是 laravel 的新手。虽然我在 laravel 5.8 上遇到了同样的问题。我创建了符号链接以将 pdf 显示为视图,但 FileNotFoundException 仍然存在。 我最终使用此 URL localhost:8000/storage/filename.ext 访问了 pdf。

    运行ln -s /path/to/laravel/storage/public /path/to/laravel/public/storagephp artisan storage:link 后,一个存储文件夹将添加到您的appname/public 目录中。我认为一旦创建链接,我们就可以通过创建的公共链接访问存储中的图像。尝试通过在public 目录中创建的新/appname/public/storage/app/pathtoimage 文件夹访问图像,而不是直接指向/appname/storage 文件夹

    <img src={{asset('/storage/pathtoimg')}} /> # using storage folder in public
    

    Check this solution will work for you

    【讨论】:

    • 从您的第一条评论中,我可以看到您正在尝试直接访问图像,而不是使用运行后创建的链接 ln -s /path/to/laravel/storage/public /path/to/laravel/public/storage
    【解决方案3】:

    我是如何解决我的问题的:

    首先,将文件保存在“public”文件夹中。

    在我的 filesystems.php 上,我更改了我的磁盘。现在我的根是“public_path”而不是“storage_path”

            'public_covers' => [
                'driver' => 'local',
                'root' => public_path('images/covers'),
                'visibility' => 'public',
            ],
    

    我的控制器方法

        public function store(Request $request){
    
            $cover = $request->file('cover');
            $inputs = $this->request->all();
    
            $this->validate($this->request, [
                'title' => 'required|max:255',
                'description' => 'required',
                'gender' => 'required',
                'secondGender' => 'required',
                'year' => 'numeric|min:1900|max:2100',
                'lenght' => 'numeric|min:10'
            ]);
    
            //build movie model object
            $movie = New Movie();
            $movie->user_id = \Auth::user()->id;
            $movie->gender_id = $inputs['gender'];
            $movie->secondgender_id = $inputs['secondGender'];
            $movie->title = $inputs['title'];
            $movie->slug = str_slug($inputs['title']);
            $movie->description = $inputs['description'];
            $movie->lenght = $inputs['lenght'];
            $movie->year = $inputs['year'];
    
            //TODO Mudar a composição do nome da foto para impedir que no futuro se sobreponha uma capa com outro filme que venha a ter o mesmo nome
            //TODO: Change the name createan to avoid overwrite the cover with an movie with the same name
            $covername = str_slug($inputs['title']).'_cover' .'.jpg';
    
            //if have an cover file
            if($cover){
                //storage the file on my public_covers (look my filesystems.php)
                Storage::disk('public_covers')->put($covername, File::get($cover));
                $coverObject = New Cover();      
    
                //path com o nome do arquivo
                //path with the file name
                $coverObject->imagePath = 'images/covers/'.$covername;
    
                $coverObject->save();
                $movie->cover_id = $coverObject->id;
            }
    
            $movie->save();
    
            return redirect()
                ->route('user.dashboard')
                ->with([
                           'success' => 'Filme adicionado com sucesso!',
                       ]);
        }
    

    我的视图图片代码

    @if($movie->cover)
                    <img class="cover" src="{{ asset($movie->cover->imagePath) }}" alt="{{ $movie->title }}"">
                    @else
                    <img class="cover" src="{{ asset('images/noimage.jpg') }}" alt="{{ $movie->title }}">
                    @endif
    

    【讨论】:

      猜你喜欢
      • 2017-02-17
      • 2019-06-12
      • 2016-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      • 2020-12-10
      • 2018-06-18
      相关资源
      最近更新 更多