【问题标题】:Fatal error: Uncaught InvalidArgumentException when trying to upload file to AWS致命错误:尝试将文件上传到 AWS 时未捕获 InvalidArgumentException
【发布时间】:2020-08-11 03:37:22
【问题描述】:

我正在尝试创建一个 s3 存储桶,然后将文件上传到其中。但是,当我运行代码时,我会收到这条丑陋的错误消息:

致命错误:未捕获的 InvalidArgumentException:发现 1 个错误同时 验证为 PutObject 操作提供的输入:[Body] 必须 是一个 fopen 资源,一个 GuzzleHttp\Stream\StreamInterface 对象,或者 可以转换为字符串的东西。发现 bool(false) 在 /Users/ddripz/Downloads/vendor/aws/aws-sdk-php/src/Api/Validator.php:65

堆栈跟踪:

#0 /Users/ddripz/Downloads/vendor/aws/aws-sdk-php/src/Middleware.php(78): Aws\Api\Validator->validate('PutObject', Object(Aws\Api\StructureShape), Array) 
#1 /Users/ddripz/Downloads/vendor/aws/aws-sdk-php/src/S3/S3Client.php(541): Aws\Middleware::Aws\{closure}(Object(Aws\Command), NULL) 
#2 /Users/ddripz/Downloads/vendor/aws/aws-sdk-php/src/S3/S3Client.php(564): Aws\S3\S3Client::Aws\S3\{closure}(Object(Aws\Command), NULL) 
#3 /Users/ddripz/Downloads/vendor/aws/aws-sdk-php/src/S3/S3Client.php(498): Aws\S3\S3Client::Aws\S3\{closure}(Object(Aws\Command), NULL) 
#4 /Users/ddripz/Downloads/vendor/aws/aws-sdk-php/src/S3/S3Client.php(517) in /Users/ddripz/Downloads/vendor/aws/aws-sdk-php/src/Api/Validator.php on line 65

这是我的 PHP 代码:

<?php
// Require the Composer autoloader.
require '/Users/ddripz/Downloads/vendor/autoload.php';

use Aws\S3\S3Client;

// Instantiate an Amazon S3 client.
$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-west-2',
    'credentials' => [
      'key' => 'API KEY',
      'secret' => 'SECRET KEY'
    ]
]);

$bucketname = 'we-sign-file-manager';
$file_path = '/Users/DennisWarfield/Desktop/wesign/uploads/5f31fc30410c17.68431957.jpg';
$key = basename($file_path);

try {
    $s3->putObject([
        'Bucket' => '',
        'Key'    => 'my-object',
        'Body'   => fopen('/path/to/file', 'r'),
        'ACL'    => 'public-read',
    ]);
} catch (Aws\S3\Exception\S3Exception $e) {
    echo "There was an error uploading the file.\n";
}

 ?>

知道为什么会这样吗?

另外,当我的 php 文件中的最大行数为 32 时,为什么会在行 65 上发生错误,我对此感到困惑。

我的autoload.php 路径是否不正确,因为文件正在下载中?

【问题讨论】:

  • 阅读错误信息:Found bool(false)。在您对putObject 的调用中,您将Body 定义为fopen(...)。但是如果打开失败,fopen 可以返回 false。我会先看看这个,如果 fopen 失败,让你的代码失败证明。他,为什么放'/path/to/file'?为什么不$file_path'Bucket' 是空白的吗?为什么不是 $bucketname?看起来像不完整的复制粘贴...

标签: php amazon-s3


【解决方案1】:

改变这一行

'Body'   => fopen('/path/to/file', 'r'),

'Body'   => fopen($file_path, 'r'),

【讨论】:

    猜你喜欢
    • 2020-01-31
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2018-09-06
    • 1970-01-01
    • 2016-10-28
    • 2021-07-10
    相关资源
    最近更新 更多