Stream files from S3 as ZIP file.
<?php | |
use Aws\S3\S3Client; | |
use ZipStream\ZipStream; // https://github.com/maennchen/ZipStream-PHP | |
use GuzzleHttp\Client as HttpClient; | |
protected function streamAsZip($files) | |
{ | |
$s3 = S3Client::factory('...'); | |
$zip = new ZipStream("foobar.zip"); | |
foreach ($files as $file) { | |
$request = $s3->createPresignedRequest( | |
$s3->getCommand('GetObject', [ | |
'Key' => $file->path, | |
'Bucket' => 'bucket-name', | |
]), | |
'+20 seconds' | |
); | |
$tmpfile = tempnam(sys_get_temp_dir(), str_random()); | |
(new HttpClient)->request('GET', (string) $request->getUri(), ['sink' => fopen($tmpfile, 'w+')]); | |
$fp = fopen($tmpfile, 'r'); | |
$zip->addFileFromStream(basename($file->path), $fp); | |
fclose($fp); | |
} | |
$zip->finish(); | |
} |
This comment has been minimized.
This comment has been minimized.
@JacobBennett: Yes, just added the missing import. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
is this a Guzzle HttpClient?