将 laravel-medialibrary-pro 媒体存储到 AWS S3 时出现问题
Problem storing laravel-medialibrary-pro media to AWS S3
我觉得我一定遗漏了一些非常简单的东西,但我已经忘记了过去 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',
],
];
我的表单 blade 视图包含:
<x-media-library-attachment name="media" rules="mimes:png,jpg,jpeg,gif|max:2048"/>
我的控制器有:
$media
->addFromMediaLibraryRequest( $request->get('media') )
->toMediaCollection('user-media', 's3-media');
现在发生了什么......
- 我将一张图片拖到表单视图的附件容器中,似乎已成功完成,我看到了我刚刚选择的图片的缩略图。
- 附件直接上传到 S3,我确认它在那里。
- temporary_uploads table 显示上传的模型。
- 媒体 table 显示了上传模型,model_type 为临时上传,collection_name 为默认。
现在我在表单上单击提交。并得到以下异常:
fopen(/srv/users/username/apps/app-name/storage/media-library/temp/HSutOfGcDuysxkxNRJwMYo42L5RaclTU//file_name.jpg): 无法打开流:没有那个文件或目录
- temporary_uploads table 已删除模型。
- 媒体 table 已更新,显示 model_type 是 MediaManager,collection_name 是 user-media,两者都符合预期。
- 但是这些文件现在已经完全从 S3 中消失了。 storage/media-library 或 storage/media-library/temp 中也没有。
非常感谢任何建议和帮助!
您模型上的 运行 save() 似乎会导致各种问题。我回到 https://github.com/spatie/laravel-medialibrary-pro-app 处的示例代码并重写了我的查询以使用创建方法而不是插入。一旦我将 $model->save() 排除在等式之外,一切都按预期进行。我最终为临时上传创建了一个本地媒体磁盘,然后在处理上传时将其发送到我的 s3 媒体磁盘。
我觉得我一定遗漏了一些非常简单的东西,但我已经忘记了过去 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',
],
];
我的表单 blade 视图包含:
<x-media-library-attachment name="media" rules="mimes:png,jpg,jpeg,gif|max:2048"/>
我的控制器有:
$media
->addFromMediaLibraryRequest( $request->get('media') )
->toMediaCollection('user-media', 's3-media');
现在发生了什么......
- 我将一张图片拖到表单视图的附件容器中,似乎已成功完成,我看到了我刚刚选择的图片的缩略图。
- 附件直接上传到 S3,我确认它在那里。
- temporary_uploads table 显示上传的模型。
- 媒体 table 显示了上传模型,model_type 为临时上传,collection_name 为默认。
现在我在表单上单击提交。并得到以下异常:
fopen(/srv/users/username/apps/app-name/storage/media-library/temp/HSutOfGcDuysxkxNRJwMYo42L5RaclTU//file_name.jpg): 无法打开流:没有那个文件或目录
- temporary_uploads table 已删除模型。
- 媒体 table 已更新,显示 model_type 是 MediaManager,collection_name 是 user-media,两者都符合预期。
- 但是这些文件现在已经完全从 S3 中消失了。 storage/media-library 或 storage/media-library/temp 中也没有。
非常感谢任何建议和帮助!
您模型上的 运行 save() 似乎会导致各种问题。我回到 https://github.com/spatie/laravel-medialibrary-pro-app 处的示例代码并重写了我的查询以使用创建方法而不是插入。一旦我将 $model->save() 排除在等式之外,一切都按预期进行。我最终为临时上传创建了一个本地媒体磁盘,然后在处理上传时将其发送到我的 s3 媒体磁盘。