Я начал работать над загрузкой файла в netstorage akamai с помощью PHP и ссылался на несколько API в GitHub. Я не могу загрузить видеофайл. Хотя я могу создавать и писать содержимое в них.
<?php
require 'Akamai.php';
$service = new Akamai_Netstorage_Service('******.akamaihd.net');
$service->authorize('key','keyname','version');
$service->upload('/dir-name/test/test.txt','sample text');
?>
Я сослался на это API. Я также сослался на несколько других, но не смог найти правильный способ загрузить файл видео / изображения. Код, который я написал выше, работает отлично. Теперь мне нужно загрузить видео файл вместо записи содержимого в текстовый файл.
Существует более современная библиотека для NetStorage Akamai, которая построена как плагин для FlySystem, Akamai открыть / NetStorage.
После того, как он установлен, вам нужно настроить аутентификацию и HTTP-клиент (на основе пропивать):
$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\FileStoreAdapter($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/write/file/to', $fileContents);
Однако, поскольку вы загружаете видеофайл, я бы предложил вам использовать поток, а не читать содержимое в память. Для этого вы используете writeStream()
вместо:
$fs = new \League\Flysystem\Filesystem($adapter);
$stream = fopen('/path/to/local/file', 'r+');
$fs->writeStream('/path/to/write/file/to', $stream);
Других решений пока нет …