2017-01-31 123 views
1

我的S3包含內含JSON的.gz對象。我只想訪問這個JSON,而不需要實際下載對象到文件。AWS S3如何在無需下載的情況下讀取.gz對象PHP

$iterator = $client->getIterator('ListObjects', array(
    'Bucket' => $bucket 
)); 

foreach ($iterator as $object) { 
    $object = $object['Key']; 

    $result = $client->getObject(array(
     'Bucket' => $bucket, 
     'Key' => $object 
    )); 

    echo $result['Body'] . "\n"; 
} 

當我運行在外殼上面它輸出關於echo線亂碼。簡單地檢索.gz對象的內容並保存到變量的正確方法是什麼?

謝謝

回答

1

您可以使用stream wrapper這樣。

$client->registerStreamWrapper(); 

if ($stream = fopen('s3://bucket/key.gz', 'r')) { 
    // While the stream is still open 
    while (!feof($stream)) { 
     // Read 1024 bytes from the stream 
     $d = fread($stream, 1024); 
     echo zlib_decode($d); 
    } 
    // Be sure to close the stream resource when you're done with it 
    fclose($stream); 
} 

如果你把它發送到你不需要zlib_decode無論是瀏覽器,只需設置一個標題:

header('Content-Encoding: gzip'); 
+0

謝謝。完美工作。我遇到了一些對象上的錯誤,但增加了解決它的字節數。 – user2029890

相關問題