0

我觉得我一定错过了一些非常简单的东西,但我已经忘记了过去 3 天我尝试过的所有事情......我正在使用 medialibrary-pro 的附件上的临时上传功能直接上传到 S3。

首先,我的配置:

.env

MEDIA_DISK="s3-media"

config/filesystems.php 定义了我的 s3 磁盘:

        's3-media' => [
        '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'),
        'endpoint' => env('AWS_ENDPOINT'),
        'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
        'root' => 'media-manager'
    ],

media-library.php 是 artisan 生成的 stock,你可以在上面看到的磁盘名称是在我的 .env 文件中设置的:

return [
'temporary_file_upload' => [
    'rules' => 'file|mimes:png,jpg,jpeg,gif|max:2048',
    'disk' => 's3-media',
    ],
];

我的表单刀片视图包含:

<x-media-library-attachment name="media" rules="mimes:png,jpg,jpeg,gif|max:2048"/>

我的控制器有:

$media
   ->addFromMediaLibraryRequest( $request->get('media') )
   ->toMediaCollection('user-media', 's3-media');

而现在会发生什么...

  1. 我将图像拖到表单视图上的附件容器中,它似乎已成功完成,并且我看到了我刚刚选择的图像的缩略图。
  • 附件直接上传到 S3,我确认它在那里。
  • temporary_uploads 表显示了上传的模型。
  • 媒体表显示了一个上传模型,其中 model_type 为 TemporaryUpload,collection_name 为默认值。
  1. 现在我单击表单上的提交。并得到以下异常:

    fopen(/srv/users/username/apps/app-name/storage/media-library/temp/HSutOfGcDuysxkxNRJwMYo42L5RaclTU//file_name.jpg):无法打开流:没有这样的文件或目录

  • temporary_uploads 表已删除模型。
  • 媒体表已更新,显示 model_type 为 MediaManager,collection_name 为 user-media,两者都符合预期。
  • 但是这些文件现在完全从 S3 中消失了。storage/media-library 或 storage/media-library/temp 中也没有任何内容。

非常感谢任何建议和帮助!

4

1 回答 1

0

似乎在您的模型上运行 save() 会导致各种问题。我回到https://github.com/spatie/laravel-medialibrary-pro-app上的示例代码并重写了我的查询以使用 create 方法而不是 insert。一旦我将 $model->save() 排除在等式之外,一切都按预期工作。我最终为临时上传创建了一个本地媒体磁盘,然后当我处理上传时,我将它发送到我的 s3-media 磁盘。

于 2022-02-04T19:41:03.277 回答