Laravel cURL错误28,将文件上传到AWS S3存储桶

时间:2019-10-03 11:24:24

标签: laravel curl amazon-s3

我正在尝试将文件上传到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>
$file = $request->file('image');
$name = 'imgname.jpg';
$filePath = 'images/' . $name;
Storage::disk('s3')->put($filePath, file_get_contents($file));

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

Laravel 6.0版

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

  

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

2 个答案:

答案 0 :(得分:1)

来自cURL docs

CURLE_OPERATION_TIMEDOUT(28)

操作超时。根据条件达到了指定的超时期限。

这是由于网络问题所致,您可以更改.ql-editor :not(.not-ql-editor)

中的选项
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,
    ]
],

希望这会有所帮助

答案 1 :(得分:1)

我解决了这个问题。问题是AWS凭证未从.env文件读取。所以我直接在filesystem.php文件中添加了

        's3' => [
            'driver' => 's3',
            'key' => 'KxxxxxxxN',
            'secret' => 'fSFrxxxxxxxxxx',
            'region' => 'us-east-1',
            'bucket' => 'bucket-name',
            'url' => 'http://s3.us-east-1.amazonaws.com/bucket-name',
        ],