You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Tenancy for Laravel(v3)和Filament(v3)多租户文件上传报错求助

解决方案:Tenancy for Laravel v3 + Filament v3 多租户文件上传路径错误问题

核心问题是Livewire临时上传未使用租户专属存储磁盘,导致文件存入中央存储路径,无法获取元数据。以下是针对性解决步骤:

  • 配置Livewire临时上传使用租户磁盘
    编辑config/livewire.php,修改或添加temporary_file_upload配置:

    'temporary_file_upload' => [
        'disk' => 'tenant', // 替换为你的租户磁盘名称
        'rules' => 'file|max:10240', // 按需调整文件大小限制
        'directory' => 'livewire-tmp',
        'middleware' => ['tenant'], // 确保请求经过租户识别中间件
    ],
    
  • 确认租户磁盘配置正确性
    检查config/filesystems.php中的租户磁盘配置,确保路径动态关联租户ID:

    'disks' => [
        // ...其他磁盘配置
        'tenant' => [
            'driver' => 'local',
            'root' => storage_path('app/tenants/' . tenant('id')), // 动态生成租户专属路径
            'visibility' => 'private',
        ],
    ],
    
  • 确保Livewire路由经过Tenancy中间件
    确保Tenancy的租户识别中间件(如InitializeTenancyByDomain)已应用到Web路由组,在app/Http/Kernel.php的web中间件组中添加:

    protected $middlewareGroups = [
        'web' => [
            // ...其他中间件
            \Stancl\Tenancy\Middleware\InitializeTenancyByDomain::class,
            \Stancl\Tenancy\Middleware\PreventAccessFromCentralDomains::class,
        ],
    ];
    

    若手动注册Livewire路由,需放在Tenancy中间件组内:

    Route::middleware(['tenant'])->group(function () {
        Livewire::routes();
    });
    
  • 设置Filament默认存储磁盘
    在Filament面板配置文件(如app/Providers/Filament/AdminPanelProvider.php)中指定默认使用租户磁盘:

    public function panel(Panel $panel): Panel
    {
        return $panel
            // ...其他面板配置
            ->defaultStorageDisk('tenant');
    }
    
  • 清理缓存并验证存储路径
    执行以下命令清除配置缓存:

    php artisan cache:clear
    php artisan config:clear
    

    测试上传后,检查临时文件是否存入租户专属路径(如storage/app/tenants/[租户ID]/livewire-tmp),而非中央存储的storage/app/private/livewire-tmp。

  • 自定义Livewire临时上传类(可选)
    若上述配置仍不生效,可自定义临时上传类强制使用租户磁盘:

    // app/Livewire/CustomTemporaryFileUpload.php
    namespace App\Livewire;
    
    use Livewire\Features\SupportFileUploads\TemporaryFileUpload;
    
    class CustomTemporaryFileUpload extends TemporaryFileUpload
    {
        protected function disk()
        {
            return \Storage::disk('tenant');
        }
    }
    

    然后在config/livewire.php中指定该类:

    'features' => [
        \Livewire\Features\SupportFileUploads\FileUploads::class => [
            'temporary_file_upload_class' => \App\Livewire\CustomTemporaryFileUpload::class,
        ],
    ],
    

内容的提问来源于stack exchange,提问作者Mahdi Sahib

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:15:13