У меня есть этот код, чтобы получить файлы из облачных файлов стойки:
$username = getenv('RS_USERNAME');
$apikey = getenv('RS_APIKEY');
$containerName = 'imagenesfc';
$region = 'DFW';
$client = new Rackspace(Rackspace::US_IDENTITY_ENDPOINT, array(
'username' => $username,
'apiKey' => $apikey,
));
$filename = "myfile.ext";
$service = $client->objectStoreService(null, $region);
$container = $service->getContainer($containerName);
$object = $container->getObject($filename);
$account = $service->getAccount();
$account->setTempUrlSecret();
$tempUrl = $object->getTemporaryUrl(15, 'GET');
в открыть документацию по облаку php говорит, что вы можете поменять ‘GET’ на ‘PUT’, и я думаю, что вместо того, чтобы его получить, я могу поместить файл, проблема в том, что файл еще не существует, и, очевидно, единственный способ создать файл загрузить его первым? PHP SDK Контейнер
В Amazon s3 я могу сделать следующее, чтобы получить то, что я хочу:
$keyname = "myfile.ext";
$arr = array(
'Bucket' => 'bucket',
'Key' => $keyname
);
$cmd = $s3Client->getCommand('PutObject', $arr);
$request = $s3Client->createPresignedRequest($cmd, '+10 minutes');
$presignedUrl = (string) $request->getUri();
Затем я могу написать в presignedUrl в любом случае, как я предпочитаю, например, с Java:
url = new URL(jObj.get("presignedUrl").toString().replace("\\", ""));
connection=(HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
out = new DataOutputStream(connection.getOutputStream());
...(write,flush,close)
Итак, в основном я хочу получить URL для загрузки из RackSpace и писать в него, как я это делаю с Amazon s3.
Является ли это возможным? И если это так, как вы можете это сделать?
Мне нужно сделать это таким образом, потому что мой API будет предоставлять только ссылки для загрузки и выгрузки, поэтому трафик напрямую не проходит через него. Я не могу сохранить файлы на моем сервере API, а затем загрузить их в облако.
Да, вы можете смоделировать загрузку файла без фактической загрузки контента в API — все, что вам нужно сделать, это определить, каким будет имя файла. Код, который вам понадобится:
$object = $container->getObject();
$object->setName('blah.txt');
$account = $service->getAccount();
$account->setTempUrlSecret();
echo $object->getTemporaryUrl(100, 'PUT');
getObject
Метод возвращает пустой объект, и все, что вы делаете, это устанавливаете удаленное имя для этого объекта. Когда создается временный URL, он использует имя, которое вы только что установили, и представляет временный URL для использования независимо от того, существует ли объект удаленно. Затем можно использовать временный URL для создания объекта.
Других решений пока нет …