我正在构建一个允许上传多种类型文件的 Web 应用程序,其中一些文件非常大。后端是使用 Symfony 构建的(实际上是 v3.1,但我认为这对这个问题并不重要),我正在使用Gaufrette Bundle 与文件系统进行交互。我发现它是一个很好的解决方案,因为它允许我根据文件类型和大小在本地存储和云对象存储之间轻松切换。
但是,我无法使其与 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 格式错误有关,但我无法找出它传递的参数是什么以及它们是否与 Softlayer API 匹配。我已经尝试过 Gaufrette 文档中显示的 OpenStack 和 Rackspace 示例,但没有成功