1

そのため、AWS php sdk 2.x ライブラリが最近公開され、1.5x からのアップグレードに七面鳥の一日を費やしました。私の最初は、S3 バックアップ クラスをアップグレードすることでした。私はすぐにエラーに遭遇しました:

Fatal error: Class 'EntityBody' not found in /usr/share/php/....my file here

圧縮されたファイルを 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
                            ) 
            )
      );

上記は1.5.xでうまくいきました。

現在、2.x で、私は彼らのドキュメントを調べていますが、ほぼすべてが変更されています (素晴らしい...最大の皮肉)。

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

これで、新しい S3 オブジェクトを取得できました。そして、これはまったく同じことを行うための私の 2.x 構文です。私の問題は、彼らが(不吉にも)古い「ファイルアップロード」を「本文」に変更し、実際にファイルを添付する方法をより抽象的にしたところで発生します。私は両方を試しましたが、依存関係 (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
                            ) 
      ));

いつもありがとう、

R

4

1 に答える 1

6

EntityBody を名前空間にインポートしましたか?

use Guzzle\Http\EntityBody;

そうでなければ、あなたはしなければならないでしょう

'Body' => \Guzzle\Http\EntityBody::factory(fopen($this->filename, 'r')),
于 2012-11-22T01:28:20.270 に答える