1

我正在使用以下 CURL 请求将文件发布到 Rackspace Cloud Files:

$ch = curl_init(trim($rackspace['X-Storage-Url']).'/container/hello');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Auth-Token: '.$rackspace['X-Auth-Token'], 'Content-Length: '.$data['file']['size']));
curl_setopt($ch, CURLOPT_PUT, true);
curl_setopt($ch, CURLOPT_INFILE, fopen($data['file']['path'], 'r'));
curl_setopt($ch, CURLOPT_INFILESIZE, $data['file']['size']);
curl_setopt($ch, CURLOPT_HEADER, true);
echo curl_exec($ch);

我正在关注 Rackspace文档,但我遇到了一个404 Not Found错误,我不太确定如何解决这个问题。有什么建议么?

解决方案

经过进一步分析,我发现认证后发出的 X-Storage-Url 是https://storage101.dfw1.clouddrive.com. dfw1表示达拉斯的数据中心,但我创建的容器在​​芝加哥。为了确认这是问题所在,我在达拉斯数据中心创建了一个容器并再次尝试——一切正常。我向 Rackspace 提交了一张票,将我的默认存储位置更改为芝加哥。现在一切正常。

正如所选答案中所指出的,如果我一直在使用最新版本的 API (2.0),那么我会看到两个位置的 URL。

4

3 回答 3

2

经过进一步分析,我发现X-Storage-Url认证后发出的是https://storage101.dfw1.clouddrive.com. dfw1表示达拉斯的数据中心,但我创建的容器在​​芝加哥。为了确认这是问题所在,我在达拉斯数据中心创建了一个容器并再次尝试——一切正常。我向 Rackspace 提交了一张票,将我的默认存储位置更改为芝加哥。现在一切正常。

于 2013-05-02T18:05:43.473 回答
2

听起来您使用的是旧的 v1.0 身份验证方法,如此处的 API 文档中所示。这样做将始终返回您的默认存储位置。但是,对于此处描述的 API 身份验证系统 v2.0,身份验证响应将包含两个不同的 Cloud Files 端点 URL,一个用于每个数据中心。但是,它们都指向相同的 API,因此如果您更换身份验证代码,所有其他与云文件相关的代码都应该“正常工作”。

于 2013-05-03T13:22:37.670 回答
0

在您的 X-Storage-Url 指向的区域中,您的帐户下必须已经存在一个名为“container”的容器。您可能会在容器上收到 404,从而阻止在其中创建对象。您可以通过 PUT 到 API 或通过http://mycloud.rackspace.com/上的控制面板创建容器。

-标记

于 2013-05-02T17:35:01.897 回答