0

私は、アーカイブと検索システムをPHPで作成しようとしています。ユーザーがアーカイブボタンをクリックすると、特定のファイルが標準ストレージから氷河ストレージに移動し、氷河ストレージ内のリストアボタンファイルをクリックすると、標準ストレージに取得されます。amazon awsの氷河の保管場所へのアーカイブと取り出しawake

AWS php SDK 3.0 APIを使用してファイルを正常に氷河のボールトに移動し、検索のためアーカイブ検索ジョブが開始され、3時間から5時間後にジョブIDを取得し、5時間後にそのジョブIDを使用しました。getJobOutput関数。そして、私はAPIのドキュメントに記載されているのと同じ応答を得ていますが、私はs3のバケットに復元されたファイルを取得していません。ここで

は私のコードは、氷河やドキュメントによると、氷河

public function archiveAndRestore() { 

$this->s3Client = new S3Client(Configure::read('AWScredentials')); 
$this->glacier = GlacierClient::factory(Configure::read('AWScredentials')); 

// Upload to glacier 
$this->s3Client->registerStreamWrapper(); 
$context = stream_context_create([ 
    's3' => ['seekable' => true] 
]); 
$result = $this->glacier->uploadArchive(array(
    'vaultName' => 'archiveTest', 
    'archiveDescription' => 'File Name is archiveTest.txt ', 
    'body' => fopen('s3://storage-bucket/Videos/archiveTest.txt', 'r', false, $context), 
)); 

$archiveid = $result->get('archiveId'); 
$jobId = $this->glacier->initiateJob([ 
    'accountId' => '-', 
    'vaultName' => 'archiveTest', 
    'jobParameters' => [ 
     'Type' => 'archive-retrieval', 
     'ArchiveId' => 'ORgyyyqsKwoopp110EvFoyqj3G-csmOKLyy3IJnWF9Dpd8BJfwerEhg241nxHf6y6kNUUyhUHOaY4y8QvWBGESmAopa80f6GZ9C05tyyKANhY-qfBUB6YkfTABg', 
    ], 
]); 


$this->s3Client->registerStreamWrapper(); 
$context = stream_context_create([ 
    's3' => ['seekable' => true] 
]); 
$stream = fopen('s3://storage-bucket/RetrivedFiles/test1.txt', 'w'); 
$result = $this->glacier->getJobOutput([ 
    'accountId' => '-', 
    'jobId' => '2dddfffffff9SwZIOPWxcB7TLm_3apNx--2rIiD7SgjOJjjkrerrcN1YCtivh_zsmpLyczY4br-bhyyX0Ev5B7e6-D1', 
    'vaultName' => 'archiveTest', 
    'saveAs' => $stream, 
]); 
fclose($stream);  

}

から復元するアップロードすることです(aws GetJobOutput operation documentationは)のsaveAs getJobOutput機能の属性が指定する場所操作の内容をすべきダウンロードしてください。ファイルへのパス、fopenから返されるリソース、Guzzle \ Http \ EntityBodyInterfaceオブジェクトのいずれかになります。私はs3のファイルへのパスも与えています。何が問題になるでしょうか。どんな助けでも本当に感謝しています。前もって感謝します。

これはドキュメント

Aws\Result Object ([data:Aws\Result:private] => Array ([body] => GuzzleHttp\Psr7\Stream Object ([stream:GuzzleHttp\Psr7\Stream:private] => Resource id #25 [size:GuzzleHttp\Psr7\Stream:private] => [seekable:GuzzleHttp\Psr7\Stream:private] => 1 [readable:GuzzleHttp\Psr7\Stream:private] => 1 [writable:GuzzleHttp\Psr7\Stream:private] => 1 [uri:GuzzleHttp\Psr7\Stream:private] => php://temp [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array ()) [checksum] => c176c1843fd0c0fc662lh9bb8de916540e6f9dpk9b22020bbb8388jk6f81d1c2 [status] => 200 [contentRange] => [acceptRanges] => bytes [contentType] => application/octet-stream [archiveDescription] => File Name is children-wide.jpg [@metadata] => Array ([statusCode] => 200 [effectiveUri] =>https://glacier.region-name.amazonaws.com/-/vaults/vaultname/jobs/gFdjAl4xhTAVEnmffgfg-Ao3-xmmjghfmqkCLOR1m34gHLQpMd0a3WKCiRRrItv2bklawwZnq9KeIch3LKs8suZoJwk2_/output [headers] => Array ([x-amzn-requestid] => NzAiVAfrMQbpSjj-2228iiKWK_VteDwNyFTUR7Kyu0duno [x-amz-sha256-tree-hash] => c176c1843khfullc662f09bb8de916540e6f9dcc9b22020bbb8388de6f81d1c2 [accept-ranges] => bytes [x-amz-archive-description] => File Name is children-wide.jpg [content-type] => application/octet-stream [content-length] => 1452770 [date] => Tue, 31 Jan 2017 03:34:26 GMT [connection] => close) [transferStats] => Array ([http] => Array ([0] => Array ())))))

+0

なぜ '$ result = ...'を使用して、 '$ result'に何が含まれているかを実際に調べることはありませんか?貴重な情報を捨てているようです。 –

+0

こんにちは@ Michael-sqlbot私は$ resultに値を格納せずに試してみたところ、ファイルはs3の場所にコピーされていませんでした。あなたは何を意味するのかを詳しく説明できますか?私がやったことは間違っているかもしれないと思います。あなたの貴重な答えをありがとう –

+0

'$ result = $ this-> glacier-> getJobOutput ...' '$ result'には何がありますか? –

答えて

0

に述べたように、あなたが氷河からファイルを復元するとき、それはもはやストレージクラスとして標準を取得することはありませんまったく同じである応答$結果に含まれている結果です。まだ氷河が表示されます。どちらかのファイルが氷河かどうかを調べるには

代わりにGetObjectを使用して、を返し、結果の復元値を見てください。また、Rangeを "bytes = 0-0"に設定すると、ファイル自体の内容の取得はスキップされます。

オブジェクトがGlacierにあり、復元されていない場合、AWSはInvalidObjectStateErrorをスローし、エラーが検出されなければスクリプトは終了します。

これは、アイテムが再保存されたことを表示します。

["Restore"] => string(68)"ongoing-request="false ", expiry-date=" Thu, 12 Oct 2017 00: 00: 00 GMT ""

そして、これはあなたが項目には氷河

Fatal error: Uncaught exception 'Aws\S3\Exception\S3Exception' with message 'Error executing "GetObject" on "OBJ PATH"; AWS HTTP error: Client error: GET OBJ PATH resulted in a 403 Forbidden response: InvalidObjectStateThe operation is not valid for the (truncated...) InvalidObjectState (client): The operation is not valid for the object's storage class - InvalidObjectStateThe operation is not valid for the object 's storage class879A42BDC3939282VjgBNmLxhqesAaOnnUKkIahdr9OlUnTPASmjh8zZNVzLeYEDz+QooqoFjyaeoyXGeAa/IPxTBrA=' GuzzleHttp\ Exception\ ClientException: Client error: `GET OBJ PATH in C:\inetpub\wwwroot\cruisecheap.com\php_includes\SDKs\AWS\vendor\aws\aws-sdk-php\src\WrappedHttpHandler.php on line 192

にまだある場合、私は、これは同じ問題を抱えていることを、あなたや他の人々を助けることを願って得るものです。

関連する問題