AWS PHP SDK版本2 S3 putObject错误

Ros*_*oss 1 php sdk amazon-s3 amazon-web-services

所以AWS php sdk 2.x库最近推出了,我已经从火鸡日开始投入1.5倍升级.我的第一个是升级我的S3备份类.我很快就遇到了一个错误:

Fatal error: Class 'EntityBody' not found in /usr/share/php/....my file here
Run Code Online (Sandbox Code Playgroud)

尝试将压缩文件上载到S3存储桶时.我写了一个类来抽象写一点,以允许多区域备份,所以下面的代码引用$ this就是这样.

$response1 = $s3->create_object(
        $this->bucket_standard,
        $this->filename,
        array(
         'fileUpload'  => $this->filename,
         'encryption' => 'AES256',
         //'acl'         => AmazonS3::ACL_PRIVATE,
         'contentType' => 'text/plain',
         'storage'     => AmazonS3::STORAGE_REDUCED,
         'headers'     => array( // raw headers
                              'Cache-Control'    => 'max-age',
                              //'Content-Encoding' => 'gzip',
                              'Content-Language' => 'en-US'
                              //'Expires'       => 'Thu, 01 Nov 2012 16:00:00 GMT'
                            ),
          'meta'     => array(
                              'param1' => $this->backupDateTime->format('Y-m-d H:i:s'),     // put some info on the file in meta tags
                              'param2' => $this->hostOrigin
                            ) 
            )
      );
Run Code Online (Sandbox Code Playgroud)

上述工作在1.5.x上运行良好.

现在,在2.x中,我正在调查他们的文档,他们已经改变了一切(很棒......最大的讽刺)

$s3opts=array('key'=> $this->accessKey, 'secret' => $this->secretKey,'region' => 'us-east-1');
$s3 = Aws\S3\S3Client::factory($s3opts);
Run Code Online (Sandbox Code Playgroud)

所以现在我有了一个新的S3对象.这是我的2.x语法来做同样的事情.我的问题出现在他们(阴险地)将旧的"fileupload"改为"Body"并使其在如何实际附加文件方面更加抽象!我已经尝试了两种,我认为它与依赖关系(Guzzle或Smyfony等)有关,但每当我尝试执行此操作时,我会得到上面的错误(或者如果你愿意,可以替换Stream).

我已经尝试过使用Composer和composer.json以及aws.phar但是在我进入之前,有什么东西是我丢失的吗?

$response1 = $s3->putObject(array(
        'Bucket' => $this->bucket_standard,
        'Key'    => $this->filename,
        'ServerSideEncryption' => 'AES256',
        'StorageClass' => 'REDUCED_REDUNDANCY',
        'Body' => EntityBody::factory(fopen($this->filename, 'r')),
        //'Body' => new Stream(fopen($fullPath, 'r')),

        'MetaData' => array(
                              'BackupTime' => $this->backupDateTime->format('Y-m-d H:i:s'),     // put some info on the file in meta tags
                              'HostOrigin' => $this->hostOrigin
                            ) 
      ));
Run Code Online (Sandbox Code Playgroud)

一如既往地谢谢,

[R

Jer*_*lom 6

您是否将EntityBody导入了命名空间?

use Guzzle\Http\EntityBody;
Run Code Online (Sandbox Code Playgroud)

否则,你必须这样做

'Body' => \Guzzle\Http\EntityBody::factory(fopen($this->filename, 'r')),
Run Code Online (Sandbox Code Playgroud)