Я создаю веб-приложение, которое позволяет загружать много типов файлов, некоторые из которых очень большие. Backend построен с использованием Symfony (на самом деле v3.1, но я не думаю, что это имеет значение для проблемы), и я использую Gaufrette Пакет для взаимодействия с файловой системой. Я нашел это отличное решение, так как оно позволяет мне легко переключаться между локальным хранилищем и облачным хранилищем объектов в зависимости от типа и размера файла.
Однако мне не удается заставить его работать с Softlayer Object Storage. Он имеет много встроенных в обертки, один из них для облаков на основе OpenStack (например, Rackspace или Softlayer) и документация кажется очень полной, но я не могу успешно подключиться к Softlayer API.
Я попробовал как интеграцию в Symfony Bundle, так и использование библиотек непосредственно в моих классах, и ни одна из них не работает, кроме последней:
public function uploadFromUrl($url)
{
$connection = new OpenStack(
'https://fra02.objectstorage.softlayer.net/auth/v1.0/',
array(
'username' => 'myuser',
'password' => 'mykey'
)
);
dump($connection);
$objectStore = $connection->objectStoreService('cloudFiles', 'fra02', 'publicURL');
$adapter = new OpenCloudAdapter(
$objectStore,
'mycontainer'
);
$filesystem = new Filesystem($adapter);
$filename = pathinfo($url, PATHINFO_FILENAME);
$filesystem->write($filename, file_get_contents($url));
return $filename;
}
И ошибка, которую я получаю:
Client error response
[status code] 400
[reason phrase] Bad Request
[url] https://fra02.objectstorage.softlayer.net/auth/v1.0/tokens
Я подозреваю, что проблема связана с неправильным форматированием curl, который библиотека делает внутри, но у меня нет никакого способа узнать, какие параметры она передает и соответствуют ли они API Softlayer. Я безуспешно попробовал оба примера OpenStack и Rackspace, показанные в документации Gaufrette.
Я пытался воспроизвести вашу проблему, но не смог (мне не удалось подключиться к хранилищу объектов). В любом случае, похоже, проблема та же, что и на следующем форуме (см. Ниже), потому что вы используете библиотеку php opencloud:
Я бы порекомендовал использовать: PHP-клиент для хранения объектов SoftLayer, Я надеюсь, что это помогает с вашими требованиями
Других решений пока нет …