我正在尝试使用本地堆栈来模拟一个s3实例,这样我就可以从表单上传图像了。这是我的docker-compose:
localstack:
image: localstack/localstack:latest
container_name: localstack
environment:
- AWS_DEFAULT_REGION=us-east-1
- SERVICES=s3
- DEBUG=1
- DATA_DIR=/tmp/localstack/data
- DOCKER_HOST=unix:///var/run/docker.sock
ports:
- "4566:4566"
volumes:
- "${TEMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"我的laravel filesystems.php看起来像这样:
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'endpoint' => env('AWS_ENDPOINT'),
],和我的envfile:
AWS_ACCESS_KEY_ID=localstack
AWS_SECRET_ACCESS_KEY=localstack
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=catering-management
AWS_ENDPOINT=http://s3.localhost:4566我尝试了两种方法,第一种只保存在我的本地存储中:
$path = Storage::putFileAs(
'/'.auth()->user()->tenant_id, $request->file('media_name'),
$request->file('media_name')->getClientOriginalName()
);第二种方法似乎是尝试连接到本地堆栈的方法是:
Storage::disk('s3')->put(auth()->user()->tenant_id.'/', $request->file('media_name'));只是它会挂起,直到抛出“超过60秒的最大执行时间”。
我在这里做错了什么?有什么提示吗?
非常感谢
编辑:
所以这看起来像是拉瓦雷尔本身的问题。使用GuzzleHttp客户端,对本地主机上任何其他服务的任何HTTP调用都会超时。
发布于 2021-10-08 23:02:29
我终于找到了解决方案。在设置nodejs服务器执行完全相同的操作后,我很快就发现了's3ForcePathStyle‘标志。我花了几个小时才在PHP中找到了等同的东西。只需添加属性:
'use_path_style_endpoint' => true敬filesystems.php。
https://stackoverflow.com/questions/69487066
复制相似问题