AWS S3文件上载:找不到S3Client类

时间:2014-08-27 18:36:33

标签: php amazon-web-services amazon-ec2 amazon-s3

我有一个大的functions.php文件,其中包含我在我的应用程序中使用的所有函数。在它的顶部,我包含use Aws\S3\S3Client;命名空间。下面文件的唯一内容是一大堆函数。

我有一个名为uploadFile的函数,它最初只是将文件加载到本地磁盘并将记录插入数据库。现在我想将文件上传到AWS S3存储桶,但是当我尝试使用我在此处找到的AWS代码时:http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpPHP.html

它给了我这个错误:

Fatal error: Class 'Aws\S3\S3Client' not found in C:\wamp\www\project\functions.php

这是我的本地实现:

function uploadFile($file_name, $target_directory, $files = null) {
    $bucket = getS3Bucket();
    $keyname = getS3Key();
    // $filepath should be absolute path to a file on disk
    $filepath = $file_name;

    // Instantiate the client.
    $s3 = S3Client::factory();

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

    return $result;
}

似乎我遇到了使用S3 API和我的程序代码的问题。有没有办法处理这个,而不必重写我上传文件的所有地方? (换句话说,我将对uploadFile函数进行任何更改,但我不想重写该函数的每个实现。)

1 个答案:

答案 0 :(得分:1)

听起来问题是您没有在functions.php中包含任何内容以启用自动加载SDK类。您包含的内容取决于您安装SDK的方式。如果您使用的是Composer,则要使用的自动加载器位于<your-project-root>/vendor/autoload.php。您可以查看SDK's Getting Started Guide,了解有关其他安装方法的详细信息(例如aws.pharaws.zip)。