У меня нет проблем с загрузкой BLOB-объекта в Azure через PHP, например:
$blobRestProxy->createBlockBlob("saskcontainer", $blob_name, $content);
но я не могу получить URL недавно созданного большого двоичного объекта. API довольно прост для получения URL
echo $blob->getUrl()
Когда я перечисляю содержимое контейнера, он может получить URL каждого файла без проблем, как это:
$blob_list = $blobRestProxy->listBlobs("saskcontainer");
$blobs = $blob_list->getBlobs();
foreach($blobs as $blob)
{
echo $blob->getUrl()."<br />";
}
Отлично, но я просто хочу один URL (из загруженного), но код ниже не работает:
$blob = $blobRestProxy->getBlob("saskcontainer", $blob_name);
echo $blob->getUrl();
Я получаю сообщение об ошибке: вызов неопределенного метода WindowsAzure \ Blob \ Models \ GetBlobResult :: getUrl ()
Я попробовал это также:
$blob = $blobRestProxy->getUrl("saskcontainer", $blob_name);
echo $blob;
ошибка: вызов неопределенного метода WindowsAzure \ Blob \ BlobRestProxy :: getUrl ()
библиотеки:
require_once 'WindowsAzure\WindowsAzure.php';
use WindowsAzure\Common\ServicesBuilder;
use WindowsAzure\Common\ServiceException;
Мысли?
URL для BLOB-объекта следует следующему шаблону:
[http|https]://[account-name].[endpoint-suffix(usually blob.core.windows.net]/[container-name]/[blob-name]
Используя этот шаблон, вы можете создать URL-адрес большого двоичного объекта, не получая его программно.
Я посмотрел Azure SDK для PHP и не смог найти простой способ программно получить URL-адрес BLOB-объекта (но я могу ошибаться). Сложным способом получения URL-адреса программным способом является вызов listBlobs
метод и передать имя BLOB-объекта как prefix
в options
параметр для этой операции. В результате вы получите только один BLOB-объект, а затем вы можете сделать следующее, чтобы получить URL-адрес BLOB-объекта:
$listBlobsOptions = new ListBlobsOptions();
$listBlobsOptions->setPrefix($blobName);
$blob_list = $blobRestProxy->listBlobs($containerName, $listBlobsOptions);
$blobs = $blob_list->getBlobs();
foreach($blobs as $blob)
{
echo $blob->getUrl()."<br />";
}
Других решений пока нет …