This library provides the following NetStorage tools
- a FlySystem adapter for NetStorage ObjectStore (
\Akamai\NetStorage\ObjectStoreAdapter
) and FileStore (\Akamai\NetStorage\FileStoreAdapter
) - a request signer (
\Akamai\NetStorage\Authentication
) - a Guzzle middleware for transparently signing requests to the API (
\Akamai\NetStorage\Handler\Authentication
)
- A PHP streams layer, so you can use
netstorage.fs://path
with any built-in I/O functions (e.g.fopen
,fread()
, andfputs
, orfile_get_contents()
andfile_put_contents()
)
Installation is done via composer
:
$ composer require akamai-open/netstorage
$signer = new Akamai\NetStorage\Authentication();
$signer->setKey($key, $keyName);
$signer->setPath('/' .$cpCode. '/path/to/file');
$signer->setAction('upload');
$headers = $signer->createAuthHeaders();
/*
Return:
[
'X-Akamai-ACS-Auth-Data' => $authData,
'X-Akamai-ACS-Auth-Sign' => $signature
];
*/
To use the middle, add it to the handler stack in the \GuzzleHttp\Client
or \Akamai\Open\EdgeGrid\Client
options:
$signer = new \Akamai\NetStorage\Authentication();
$signer->setKey($key, $keyName);
$handler = new \Akamai\NetStorage\Handler\Authentication();
$handler->setSigner($signer);
$stack = \GuzzleHttp\HandlerStack::create();
$stack->push($handler, 'netstorage-handler');
$client = new \Akamai\Open\EdgeGrid\Client([
'base_uri' => $host,
'handler' => $stack
]);
// Upload a file:
// Request signature is added transparently
// All parent directories must exist (e.g. /path/to)
$client->put('/' . $cpCode . '/path/to/file', [
'headers' => [
'X-Akamai-ACS-Action' => 'version=1&action=upload&sha1=' .sha1($fileContents)
],
'body' => $fileContents
]);
The simplest way to interact with NetStorage ObjectStore or FileStore is using the \Akamai\NetStorage\ObjectStoreAdapter
or \Akamai\NetStorage\FileStoreAdapter
for FlySystem.
$signer = new \Akamai\NetStorage\Authentication();
$signer->setKey($key, $keyName);
$handler = new \Akamai\NetStorage\Handler\Authentication();
$handler->setSigner($signer);
$stack = \GuzzleHttp\HandlerStack::create();
$stack->push($handler, 'netstorage-handler');
$client = new \Akamai\Open\EdgeGrid\Client([
'base_uri' => $host,
'handler' => $stack
]);
$adapter = new \Akamai\NetStorage\ObjectStoreAdapter($client, $cpCode);
$fs = new \League\Flysystem\Filesystem($adapter);
// Upload a file:
// cpCode, action, content signature, and request signature is added transparently
// Additionally, all required sub-directories are created transparently
$fs->write('/path/to/file', $fileContents);
Please note that $key, $keyName & $host can be obtained from "NetStorage API Information" page: https://control.akamai.com/storage/customer_portal.jsp?content_page=ns_api_info.jsp