J'essaie de télécharger un fichier .tar.gz de 9 Go que j'ai créé à l'aide de l'assistant CPanel Backup. Ce fichier doit être stocké tel quel sur Amazon Glacier mais Amazon Glacier a une limite de téléchargement de 4 Go.Comment télécharger un fichier .tar.gz dans Amazon Glacier en utilisant PHP et aws-SDK v2 avec le téléchargement en plusieurs parties?
Existe-t-il un moyen de faire cela en utilisant PHP, aws-SDK v2 et uploadMultipartPart?
Ceci est le code que je suis arrivé à ce jour:
<?php
require 'aws-autoloader.php';
use Aws\Glacier\GlacierClient;
use Aws\Glacier\Model\MultipartUpload\UploadPartGenerator;
//#####################################################################
//SET AMAZON GLACIER VARIBALES
//#####################################################################
$key = 'XXXXXXXXXXXXXXXXX';
$secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$region = 'us-west-2';
$accountId = 'XXXXXXXXXXXX';
$vaultName = 'XXXXXXXXXXXX';
$partSize = 4 * 1024 * 1024;
$fileLocation = 'path/to/.tar.gz file/';
//#####################################################################
//DECLARE THE AMAZON CLIENT
//#####################################################################
$client = GlacierClient::factory(array(
'key' => $key,
'secret' => $secret,
'region' => $region,
));
//#####################################################################
//GET ALL FILES INTO AN ARRAY
//#####################################################################
$files = scandir($fileLocation);
$filename = $files[2];
//#####################################################################
// USE HELPERS IN THE SDK TO GET INFORMATION ABOUT EACH OF THE PARTS
//#####################################################################
$archiveData = fopen($fileLocation.$filename, 'r');
$parts = UploadPartGenerator::factory($archiveData, $partSize);
//#####################################################################
// INITIATE THE UPLOAD AND GET THE UPLOAD ID
//#####################################################################
$result = $client->initiateMultipartUpload(array(
'vaultName' =>$vaultName,
'partSize' => $partSize,
));
$uploadId = $result->get('uploadId');
//#####################################################################
// UPLOAD EACH PART INDIVIDUALLY USING DATA FROM THE PART GENERATOR
//#####################################################################
$archiveData = fopen($fileLocation.$filename, 'r');
foreach ($parts as $part) {
set_time_limit (120);
fseek($archiveData, $part->getOffset());
$client->uploadMultipartPart(array(
'vaultName' => $vaultName,
'uploadId' => $uploadId,
'body' => fread($archiveData, $part->getSize()),
'range' => $part->getFormattedRange(),
'checksum' => $part->getChecksum(),
'ContentSHA256' => $part->getContentHash(),
));
}
//#####################################################################
// COMPLETE THE UPLOAD BY USING DATA AGGREGATED BY THE PART GENERATOR
//#####################################################################
$result = $client->completeMultipartUpload(array(
'vaultName' => $vaultName,
'uploadId' => $uploadId,
'archiveSize' => $parts->getArchiveSize(),
'checksum' => $parts->getRootChecksum(),
));
$archiveId = $result->get('archiveId');
fclose($archiveData);
?>
Geez, pourquoi n'y a-t-il aucun exemple de ceci n'importe où? –