php - 显示存储 laravel 5.3 中的图像

标签 php laravel

我是 laravel 框架的新手,我想显示存储在存储文件夹中的图像。这个我试过了

路线

 Route::get('/userimage/{filename}', [
        'uses' =>'PostController@getUserImage',
        'as' => 'account.image',
    ]);

blade文件获取url并显示图片

 </section>
    @if (Storage::disk('public')->has($user->first_name . '-' . $user->id . '.jpg'))
        <section class="row new-post">
            <div class="col-md-6 col-md-offset-3">
                <img src="{{ route('account.image', ['filename' => $user->first_name . '-' . $user->id . '.jpg']) }}" alt="" class="img-responsive">
            </div>
        </section>

Controller

 public function getUserImage($filename)
{
    $file = Storage::disk('public')->get($filename);
    return new Response($file,200);
}

如何使用上面的代码显示图像?

最佳答案

我遇到了同样的问题。问题是,您无法按照建议访问存储中的内容 here你可以简单地从 public/storagestorage/app/public 创建一个 symbolic link 通过使用这个命令 php artisan storage:link 然后你可以像这样通过公共(public)目录访问存储目录中的任何内容 asset('storage/path_to_file'), 当然,有时您不可能这样做(例如,当您将项目部署到共享主机时)。如果是这种情况, 您可以尝试将文件上传到公共(public)目录(每个人都可以访问)并使用 asset() 方法处理文件 1. 你可以简单地在存在于 config/filesystems.php 的磁盘阵列中定义一个新的磁盘驱动程序。在 laravel 5.4 中,默认定义了三个驱动('local', 'public', 's3')。你只需要添加你自己的驱动程序,我们在这里称之为 'MyDiskDriver'(但你可以随意命名)。 config/filesystems.php

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_KEY'),
            'secret' => env('AWS_SECRET'),
            'region' => env('AWS_REGION'),
            'bucket' => env('AWS_BUCKET'),
        ],
        'MyDiskDriver' => [
            'driver' => 'local',
            'root' => public_path('uploads'),
            'url' => env('APP_URL').'/public',
            'visibility' => 'public',
        ],

    ],
];

请注意,对于“MyDiskDriver”,“root”已设置为 public/uploads(这意味着当您使用 Illuminate\Http\UploadedFile 类的存储方法并将“MyDiskDriver”的名称作为第二个参数传递时,laravel会将文件上传到 public/uploads 目录。)

  1. 当您使用 Illuminate\Http\UploadedFile 类的 store 方法时,您可以将新创建​​的磁盘驱动程序的名称(此处为“MyDiskDriver”)作为第二个参数传递,以便 laravel 可以使用它来存储您尝试存储的文件位于您在“root”(此处为 public/uploads)中指定的目录中。

  2. 您可以使用asset() 方法访问上传的文件。

编辑

除了执行第 2 步,您还可以将 .env 中的 FILESYSTEM_DRIVER 环境变量的值更改为您刚刚创建的磁盘驱动程序的名称,在我们的案例 MyDiskDriver。 通过这种方式,您无需更改代码即可轻松更改磁盘驱动程序,只需更改 FILESYSTEM_DRIVER 环境变量的值

关于php - 显示存储 laravel 5.3 中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41984496/

相关文章:

php - php 中的 float 转为 javascript

php - 如何防止 PHP 中的 SQL 注入(inject)?

php - 在 Laravel 5.4 中安装 Laracast Generator 后出现 Trait 'Illuminate\Console\AppNamespaceDetectorTrait' not found 错误

laravel - 如何使用 Eloquent 平均多列?

php - 如何给zencart产品添加自己的style和html

php - 将二进制数转换为 Base 64

php - PostgreSQL 查询 mySQL

php - 在 Laravel/Lumen 中,为什么 catch block 没有捕获我的异常?

php - Laravel 在类构造函数中检索参数

php - Laravel - 与软删除数据的隐式路由模型绑定(bind)