Laravel 5中S3 flysystem适配器的路径不正确

Bil*_*low 5 php amazon-s3 laravel-5

将文件上传到S3存储桶时,我遇到了Laravel 5文件系统的问题.运行到文件系统的行是:

Storage::disk('s3')->put($slug, $img);
Run Code Online (Sandbox Code Playgroud)

它的工作原理应该是:

Storage::disk('local')->put($slug, $img);
Run Code Online (Sandbox Code Playgroud)

但是当我将磁盘更改为S3时,它会抛出以下错误:

Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found
Run Code Online (Sandbox Code Playgroud)

根据L5文档,我在composer.json中有以下要求

"league/flysystem-aws-s3-v2": "~1.0"
Run Code Online (Sandbox Code Playgroud)

其中安装了联盟的aws flysystem适配器:

League\flysystem-aws-s3-v2\
Run Code Online (Sandbox Code Playgroud)

我已经尝试将filess vendor文件夹中的fileSystemManager.php中的路径更新为aws flysystem安装路径,但它仍然无效.我似乎无法找到任何经历过这种行为的人.

一双新鲜的眼睛或知识渊博的头脑,他们可能比我更了解Laravel.我真的无法解决这个问题.

UPDATE

我做了一个全新安装的aws flysystem而不是我得到以下内容:

ErrorException in Util.php line 250:
fstat() expects parameter 1 to be resource, object given
Run Code Online (Sandbox Code Playgroud)

Bil*_*low 12

好的,所以我修复了最初的问题,删除aws/aws-sdk-php : "^2.8.*了我的,composer.json并运行了一个新的'composer require league/flysystem-aws-s3-v3~1.0'.这修复了找到S3飞系统的初始错误.

第二个错误fstat() expects parameter 1 to be resource, object given与我尝试将图像对象传递给put方法有关:

Storage::disk('s3')->put($slug, $img);
Run Code Online (Sandbox Code Playgroud)

当它需要一个字符串.这是通过字符串化$ img对象来修复的

Storage::disk('s3')->put($slug, $img->__toString());
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他可能遇到此问题的人.

  • 谢谢你的提示!知道为什么我们需要对对象进行字符串化吗?这感觉有点奇怪.谢谢! (2认同)