Possiamo usare l'SDK PHP di Amazon S3 per effettuare operazioni comuni sui file in WordPress.
Dopo aver installato l'SDK, definiamo le costanti di base che useremo e includiamo i componenti richiesti.
require_once('lib/aws/aws-autoloader.php');
define( 'MY_S3_KEY', '' );
define( 'MY_S3_SECRET', '' );
define( 'MY_S3_BUCKET', '' );
define( 'MY_S3_PATH', '' );
define( 'MY_S3_REGION', '' );
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
use Aws\S3\MultipartUploader;
use Aws\Exception\MultipartUploadException;
use Aws\S3\Exception\S3Exception;
Per l'upload di un file è richiesto il percorso del file sul server e il nome del file.
function my_s3_upload( $file = array() ) {
$s3Client = new S3Client([
'version' => 'latest',
'region' => MY_S3_REGION,
'credentials' => [
'key' => MY_S3_KEY,
'secret' => MY_S3_SECRET
]
]);
$source = $file['path'];
$uploader = new MultipartUploader($s3Client, $source, [
'bucket' => MY_S3_BUCKET,
'key' => MY_S3_PATH . $file['name']
]);
try {
$result = $uploader->upload();
return $result['ObjectURL'];
} catch ( MultipartUploadException $e ) {
return null;
}
}
In caso di successo, la funzione restituisce l'URL del file su Amazon S3.
Per l'operazione di download abbiamo bisogno di passare la chiave S3 per poter reperire il file. Una chiave è composta dal percorso reelativo di un file su un bucket S3, ad esempio directory/file.estensione, senza lo slash iniziale.
function my_s3_download( $key ) {
$s3Client = new S3Client([
'version' => 'latest',
'region' => MY_S3_REGION,
'credentials' => [
'key' => MY_S3_KEY,
'secret' => MY_S3_SECRET
]
]);
$object = $s3Client->getObject(array(
'Bucket' => MY_S3_BUCKET,
'Key' => $key
));
header( 'Content-Type: ' . $object->get( 'ContentType' ) );
echo $object->get( 'Body' );
exit;
}
Allo stesso modo la cancellazione di un file richiede una chiave specifica.
function my_s3_delete( $key ) {
$s3Client = new S3Client([
'version' => 'latest',
'region' => MY_S3_REGION,
'credentials' => [
'key' => MY_S3_KEY,
'secret' => MY_S3_SECRET
]
]);
try {
$result = $s3Client->deleteObject([
'Bucket' => MY_S3_BUCKET,
'Key' => $key
]);
if ( $result['DeleteMarker'] ) {
return true;
} else {
return false;
}
} catch( S3Exception $e ) {
return false;
}
}