簡體   English   中英

如何使用PHP創建臨時URL以將文件上傳到RackSpace Cloud Files?

[英]How to create Temporary URL to upload file to RackSpace Cloud Files using 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)

因此,基本上我想做的是像從Amazon s3一樣,從RackSpace獲取上傳URL並將其寫入。

可能嗎? 如果是的話,您該怎么辦?

我需要這樣做,因為我的API僅提供下載和上傳鏈接,因此沒有流量直接通過它。 我無法將文件保存到我的API服務器,然后將其上傳到雲。

是的,您可以模擬文件上傳而無需實際將內容上傳到API-您要做的就是確定文件名。 您將需要的代碼是:

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

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

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

getObject方法返回一個空對象,您要做的就是在該對象上設置遠程名稱。 創建臨時URL時,它將使用您剛剛設置的名稱,並提供一個臨時URL供您使用-不管對象是否位於遠程。 然后可以使用臨時URL創建對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM