WordPress: gestione dei file su Amazon S3

WordPress: gestione dei file su Amazon S3

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;
	}
}

Torna su