将文件上传到 aws s3 存储桶时,Laravel cURL 错误 28

Sha*_*van 0 curl amazon-s3 laravel

我正在尝试将文件上传到 AWS S3 存储桶。这是我的表单和控制器

<form action="{{ url('/') }}" method="post" enctype="multipart/form-data">
{{ csrf_field() }}
   <input type="file" name="image" id="image">
   <button type="submit">Save</button>
</form>
Run Code Online (Sandbox Code Playgroud)
$file = $request->file('image');
$name = 'imgname.jpg';
$filePath = 'images/' . $name;
Storage::disk('s3')->put($filePath, file_get_contents($file));
Run Code Online (Sandbox Code Playgroud)

我还在 .env 文件中添加了 AWS 凭证。

Laravel 版本 6.0

我上传文件时出现以下错误。

GuzzleHttp\Exception\ConnectException cURL 错误 28:(参见http://curl.haxx.se/libcurl/c/libcurl-errors.html

Sal*_*301 5

来自cURL 文档

CURLE_OPERATION_TIMEDOUT (28)

操作超时。根据条件已达到规定的超时期限。

所以这是由于网络问题,您可以更改选项config/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'),
    'url' => env('AWS_URL'),
    'curl.options' => [
        CURLOPT_CONNECTTIMEOUT => 5,
        CURLOPT_TIMEOUT => 10,
    ]
],
Run Code Online (Sandbox Code Playgroud)

当然,这不必是全局的,您可以在特定调用上设置选项

Storage::disk('s3')->getDriver()->put($filePath, file_get_contents($file), [ 'curl.options' => [CURLOPT_CONNECTTIMEOUT => 5, CURLOPT_TIMEOUT => 10]]);
Run Code Online (Sandbox Code Playgroud)