【问题标题】:Call to undefined method League\Flysystem\Filesystem::store调用未定义的方法 League\Flysystem\Filesystem::store
【发布时间】:2021-03-14 21:15:59
【问题描述】:

我在主机中上传我的项目。我上传了一张图片,图片保存在数据库中。并且图像显示不好,但它也显示在我的本地主机中。

配置/文件系统.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_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION'),
        'bucket' => env('AWS_BUCKET'),
        'url' => env('AWS_URL'),
    ],

],

web.php

use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

Auth::routes();

Route::get('/link', function(){
    return Artisan::call('storage:link');
});

它返回显示 0。

控制器

public function update(Request $request)
{
    $user = auth()->user();
    $path = $user->image ?? null;
    if ($request->hasFile('image'))
    {
        $file = $request->file('image');
        $nane = time();
        $extension = $file->getClientOriginalExtension();
        $fileName = $nane . '.' . $extension;
        $path = $file->storeAs('images/users', $fileName, 'public');
    }
    $user->image = $path;
}

图像保存在数据库中。

图片上传到 storage/app/public/images/users 文件夹。

图片未上传 public/images/users。

那我改一下

 $path = Storage::disk('public')->store('images/users/'.$fileName);

我得到了这个代码

【问题讨论】:

  • store 和 storeAs 是 UploadedFile 上可用的方法,而 Storage 上可用的方法是 put、putFile 和 putFileAs
  • 这是我第一次使用 Laravel。如果你知道你可以把代码放在这里?

标签: php laravel


【解决方案1】:

存储立面

//Will store the uploaded image in /storage/app/public/images/users
$path = Storage::disk('public')->putFileAs('images/users', $file, $fileName);

Laravel 文档:https://laravel.com/docs/8.x/filesystem#storing-files

上传的文件

//Will store the uploaded image in /storage/app/public/images/users
$path = $request->image->storeAs('images/users', $filename, 'public');

Laravel 文档:https://laravel.com/docs/8.x/requests#storing-uploaded-files

更新方法的小重构

public function update(Request $request)
{
    $user = auth()->user();
    
    if ($request->hasFile('image') && $request->file('image')->isValid())
    {
        $file = $request->file('image');
        $nane = time();
        $extension = $file->getClientOriginalExtension();
        $fileName = $nane . '.' . $extension;
        $user->image = $file->storeAs('images/users', $fileName, 'public');

    }

    $user->save();
   
}

【讨论】:

  • 我要上传的存储没有公开
  • 我在帖子中添加了filesystem.php
  • @irankhostravi 已更新我的答案。 “图片未上传 public/images/users”让我认为您想将图片存储在 /public - 感到困惑,对此感到抱歉
  • @irankhostravi 更新了答案,在更新方法中几乎没有重构。现在让我知道一切是否按您的预期进行
  • 三种方法都试过了,都不行
猜你喜欢
  • 2022-09-29
  • 2020-09-02
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2017-12-09
  • 2018-01-19
  • 2020-11-29
相关资源
最近更新 更多