首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Laravel 9的存储立面获取S3Client

从Laravel 9的存储立面获取S3Client
EN

Stack Overflow用户
提问于 2022-02-18 15:23:50
回答 2查看 2.4K关注 0票数 1

我正在尝试升级一个S3多部分Uploader,从Laravel 8升级到Laravel 9,并按照文档中所述升级到Flysystem 3,并且没有依赖错误https://laravel.com/docs/9.x/upgrade#flysystem-3

我在访问底层S3Client以创建多部分上传时遇到了困难。

代码语言:javascript
运行
复制
// Working in Laravel 8
// Laravel 9 throws exception on getAdapter()

$client = Storage::disk('s3')->getDriver()->getAdapter()->getClient();

// Underlying S3Client is used to create Multipart uploader as below
$bucket = config('filesystems.disks.s3.bucket');
$result = $client->createMultipartUpload([
    'Bucket' => $bucket,
    'Key' => $key,
    'ContentType' => 'image/jpeg',
    'ContentDisposition' => 'inline',
]);

return response()
    ->json([
        'uploadId' => $result['UploadId'],
        'key' => $result['Key'],
    ]);

然而,Laravel 9抛出了一个异常Call to undefined method League\Flysystem\Filesystem::getAdapter()

我已经查看了League\Flysystem的源代码和Laravel的更新,但似乎找不出正确的方法来处理更新和访问底层的Aws\S3\S3Client

我的更大的项目是使用一个分叉的laravel-upp-s3-多部分上传库,可以在这里看到https://github.com/kerkness/laravel-uppy-s3-multipart-upload/tree/laravel9

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-18 15:36:51

在Flysystem AWS适配器github问题中讨论了这一点:

https://github.com/thephpleague/flysystem-aws-s3-v3/issues/284

在Laravel中添加了一个方法,将于下星期二(2022年2月22日)发布:

https://github.com/laravel/framework/pull/41079

解决方案

Laravel FilesystemAdapter基类是可宏的,这意味着您可以在AppServiceProvider中执行此操作。

代码语言:javascript
运行
复制
Illuminate\Filesystem\AwsS3V3Adapter::macro('getClient', fn() => $this->client);

现在你可以打电话..。

代码语言:javascript
运行
复制
Storage::disk('s3')->getClient();

..。您将拥有S3Client的一个实例。(我喜欢宏!)

一旦下周二的发行版可用,您可以删除这个宏。

票数 6
EN

Stack Overflow用户

发布于 2022-07-19 12:08:51

从S3获取/获取对象/图像在Laravel 9?或*从S3显示文件?*

Ans:

从Laravel 9获取对象(图像、PDF、视频)只需三个步骤:

转到项目目录:

步骤1:作曲家要求联盟/飞行系统-AWS-S3-v3

第2步转到.env并右转

  • AWS_ACCESS_KEY_ID=your_aws_access_key

AWS_SECRET_ACCESS_KEY=your_aws_secret_key

AWS_DEFAULT_REGION=your_aws_regios

AWS_BUCKET=your_bucket_name

AWS_USE_PATH_STYLE_ENDPOINT=false

步骤3:转到任何控制器,并在函数$source =$source()->addMinutes(30)中右转;

然后,您可以将$source变量传递到任何您想要的地方。

谢谢

贾汉扎伊

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71175892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档