显示图像从存储laravel 5.3

z9zf31ra  于 2023-04-13  发布在  其他
关注(0)|答案(4)|浏览(131)

我是新的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>

控制器

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

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

7kqas0il

7kqas0il1#

我也遇到了同样的问题。问题是,你不能访问存储中的东西,所以这里建议你可以简单地使用这个命令php artisan storage:linkpublic/storagestorage/app/public创建一个symbolic link,然后你可以通过公共目录访问存储目录中的任何东西,比如这个asset('storage/path_to_file'),当然有时候你不可能这样做(例如,当您将项目部署到共享主机时)。如果是这种情况,你可以尝试上传文件到公共目录(每个人都可以访问),并使用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类的store方法并将'MyDiskDriver'的名称作为第二个参数传递时,laravel将在public/uploads目录中上传文件。
1.当你使用Illuminate\Http\UploadedFile类的store方法时,你可以传递新创建的磁盘驱动程序的名称(这里是'MyDiskDriver')作为第二个参数,这样laravel就可以使用它来存储你试图存储的文件,在'root'中指定的目录(这里是public/uploads)。
1.您可以使用asset()方法访问上传的文件。

编辑

不需要执行步骤2,您可以将.env中的FILESYSTEM_DRIVER环境变量的值更改为您刚刚创建的磁盘驱动程序的名称,在我们的示例中为MyDiskDriver。这样,您可以轻松更改磁盘驱动程序,而无需更改代码,只需更改FILESYSTEM_DRIVER环境变量的值

r3i60tvu

r3i60tvu2#

你的控制器应该处理所有的“幕后”过程,而你的视图只显示html和php变量,这是MVC模式的要点。
所以你的控制器应该返回一个视图,并在它的视图中注入文件路径。

public function getUserImage($filename)
{
    $file = Storage::disk('public')->get($filename);

    return view('yourviewnamehere', ['myFile' => $file]);
}

现在,您的视图将能够访问变量$myFile

<!-- ... -->
    @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="{{ URL::to('img/' . $myFile) ]) }}" alt="" class="img-responsive">
            </div>
        </section>
    @endif
<!-- ... -->

我假设了public/img/中图像的文件路径,所以可以随意更改这部分代码。此外,无论变量是否包含后缀.jpg,您都应该添加它。

kpbpu008

kpbpu0083#

Laravel 5 - How to access image uploaded in storage within View?
检查第一个答案,您可以将所有File替换为Storage
下面是我做的一个函数:

public function getUserImage($filename)
    {
        $storagepath = $filename;
        if (!Storage::disk('public')->exists($storagepath)) {
            $storagepath = 'defaultuserimage.jpeg';
        }
        $path = Storage::disk('public')->getDriver()->getAdapter()->applyPathPrefix($storagepath);

        return Image::make($path)->response();
    }

它需要介入图像包。

4dc9hkyq

4dc9hkyq4#

为什么图像存储在Laravel站点的cetos服务器上,但不显示,而是显示这个地址http://localhost:8000/storage/images/1672938425.jpg?
我想把照片给你看
同时,我使用以下代码在services文件夹中的共享文件夹中配置镜像:使用Illuminate\Support\Facades\Storage;
class ShareService { public static function uploadImage($file,$folder){ $name = time(). '.' . $file-〉getClientOriginalExtension();存储::disk('public')-〉putFileAs('images/' . $folder,$file,$name);

$path = asset('storage/images/' . $folder . '/' . $name);

    return [$name, $path];
}

相关问题