【问题标题】:Upload to AWS S3 failing上传到 AWS S3 失败
【发布时间】:2017-04-12 00:39:38
【问题描述】:

我正在尝试通过 Ajax 将文件从我的 Wordpress 应用程序上传到 S3 存储桶: 不知何故,我没有得到答案,并且在应用“putObject”方法时脚本失败并出现 500 错误。

app/ajax.php

require_once 's3/start.php'
//wp_die(var_dump($s3)); Seems to be fine
$upload = $s3->putObject([
    'Bucket' => $config['s3']['bucket'],
    'Key' => 'video,
    'Body'   => fopen( $_FILES['file']['tmp_name'], 'r' ),
    'ACL' => 'public-read',
]);
if ($upload) {
    wp_die('Uploaded');
} else {
    wp_die('Upload Error');
}

app/s3/start.php

use Aws\S3\S3Client;
require 'aws/aws-autoloader.php';
$config = require('config.php');
$s3 = new S3Client([
    'key'       =>  $config['s3']['key'],
    'secret'    =>  $config['s3']['secret'],
    'region'    =>  $config['s3']['region'],
    'version'   =>  'latest',
]);

app/s3/aws

Latest version of the official AWS SDK for PHP

解决方案 app/start.php 中的凭据在初始化 $s3 对象时未正确分配。应该是这样的

$s3 = S3Client::factory([
'region'    =>  $config['s3']['region'],
'version'   =>  'latest',
'credentials' => [
    'key'    => $config['s3']['key'],
    'secret' => $config['s3']['secret']
]
]);

【问题讨论】:

    标签: php ajax wordpress amazon-web-services amazon-s3


    【解决方案1】:

    如果你上传文件,你应该使用SourceFile而不是Body

    示例代码:

    $result = $s3->putObject(array(
            'Bucket'       => $bucket,
            'Key'          => $keyname,
            'SourceFile'   => $filepath,
            'ContentType'  => 'text/plain',
            'ACL'          => 'public-read',
            'StorageClass' => 'REDUCED_REDUNDANCY',
            'Metadata'     => array(    
                'param1' => 'value 1',
                'param2' => 'value 2'
            )
        ));
    

    更多信息来自这里 - http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpPHP.html

    【讨论】:

    • 刚刚试过了,还是不行。使用 wp_die() 测试我得到以下结果: $bucket => 正确的存储桶名称,$key => 正确的密钥名称,$filepath => '/tmp/phpNKgE0e'
    • 我刚刚通过 var_dump(get_class_methods($s3)) 检查了对象方法,没有 putObject 方法
    • 啊 - 请做两件事 1) 你能用ini_set()error_reporting() 打印出所有错误吗?它肯定会帮助你。 2)您的客户端连接似乎也无效,keysecret 通常嵌套在credentials 中。查看此文档,docs.aws.amazon.com/aws-sdk-php/v3/guide/guide/…,获取凭证部分。
    • 你太棒了。它的凭据,似乎我没有正确分配它们,我刚刚更新了帖子。非常感谢!
    猜你喜欢
    • 2014-11-15
    • 2021-04-20
    • 2018-12-31
    • 2017-08-16
    • 2015-09-12
    • 2016-08-07
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    相关资源
    最近更新 更多