amazon s3 — Как создать временный URL для загрузки файла в RackSpace Cloud Files с использованием PHP?

У меня есть этот код, чтобы получить файлы из облачных файлов стойки:

$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, а затем загрузить их в облако.

0

Решение

Да, вы можете смоделировать загрузку файла без фактической загрузки контента в API — все, что вам нужно сделать, это определить, каким будет имя файла. Код, который вам понадобится:

$object = $container->getObject();
$object->setName('blah.txt');

$account = $service->getAccount();
$account->setTempUrlSecret();

echo $object->getTemporaryUrl(100, 'PUT');

getObject Метод возвращает пустой объект, и все, что вы делаете, это устанавливаете удаленное имя для этого объекта. Когда создается временный URL, он использует имя, которое вы только что установили, и представляет временный URL для использования независимо от того, существует ли объект удаленно. Затем можно использовать временный URL для создания объекта.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]