获取刚刚通过PHP上传到Azure存储的Blob的网址

问题描述 投票:2回答:2

我像这样通过PHP将blob上传到Azure没问题:

 $blobRestProxy->createBlockBlob("saskcontainer", $blob_name, $content);

但是我无法获取新创建的Blob的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中的一个)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;

想法?

php azure azure-storage-blobs
2个回答
0
投票

blob的URL遵循以下模式:

[http|https]://[account-name].[endpoint-suffix(usually blob.core.windows.net]/[container-name]/[blob-name]

使用此模式,您可以构建Blob的URL,而无需通过编程获取它。

我查找了适用于PHP的Azure SDK,但找不到用于以编程方式获取Blob URL的简单方法(但后来我可能是错的)。以编程方式获取URL的一种复杂方法是​​调用listBlobs方法,并将该Blob名称作为prefix传递给此操作的options参数。您只会在结果中得到一个Blob,然后可以执行以下操作以获取Blob URL:

    $listBlobsOptions = new ListBlobsOptions();
    $listBlobsOptions->setPrefix($blobName);
    $blob_list = $blobRestProxy->listBlobs($containerName, $listBlobsOptions);
    $blobs = $blob_list->getBlobs();

    foreach($blobs as $blob)
    {
      echo $blob->getUrl()."<br />";
    }

0
投票
public function getBlobUrl($accountName, $container, $blob, $resourceType, $permissions, $start, $expiry, $_signature) {
    /* Create the signed query part */
    $_parts = array();
    $_parts[] = 'sv=2015-04-05';
    $_parts[] = 'sr=' . $resourceType;
    $_parts[] = 'sig=' . urlencode($_signature);
    $_parts[] = (!empty($start)) ? 'st=' . urlencode($start) : '';
    $_parts[] = (!empty($expiry)) ? 'se=' . urlencode($expiry) : '';
    $_parts[] = (!empty($permissions)) ? 'sp=' . $permissions : '';

    /* Create the signed blob URL */

    if ($accountName == 'devstoreaccount1') {
        $_url = 'http://127.0.0.1:10000/'
                . $accountName . '/'
                . $container . '/'
                . $blob . '?'
                . implode('&', $_parts);
    } else {
        $_url = 'https://'
                . $accountName . '.blob.core.windows.net/'
                . $container . '/'
                . $blob . '?'
                . implode('&', $_parts);
    }

    return $_url;
}
© www.soinside.com 2019 - 2024. All rights reserved.