检查 Azure Blob 存储中是不是存在 blob (php)

Posted

技术标签:

【中文标题】检查 Azure Blob 存储中是不是存在 blob (php)【英文标题】:Checking if a blob exists in Azure Blob storage (php)检查 Azure Blob 存储中是否存在 blob (php) 【发布时间】:2013-07-05 18:56:13 【问题描述】:

简单的问题;如何使用文件名在 Azure blob 存储中使用 php 检查 blob 是否存在?我似乎在 API 中找不到它。

干杯

【问题讨论】:

【参考方案1】:

我今天正在寻找这个,这是最热门的搜索结果,所以想在这里给出我的解决方案,它使用前缀选项来仅查找与我正在寻找的名称匹配的 blob。

您还需要包含use MicrosoftAzure\Storage\Blob\Models\ListBlobsOptions;

function blobExists($name)

    global $blobClient, $blobContainer;

    $listBlobsOptions = new ListBlobsOptions();
    $listBlobsOptions->setPrefix($name);
    $result = $blobClient->listBlobs($blobContainer, $listBlobsOptions);
    return count($result->getBlobs());

【讨论】:

有没有办法可以针对特定的 blob?除了获得所有“SMITH”回报之外,我可以只获得SMITHRA 的匹配回报吗? 除非我误解了你的问题,你不能只将SMITHRA 传递给函数,即blobExists('SMITHRA')吗? 我用这个方法让它工作了,$listBlobsOptions->setPrefix($name . '.jpg'); - 它工作的唯一方法是事后添加图片扩展,但效果很好,谢谢!如果我没有扩展,我将获得 SMITHRA 的所有回报,如 SMITHRAC、SMITHRAZ 等。因为listBolbs 返回所有 blob,而不仅仅是一个。 啊,你没有提到你想寻找一个特定的文件扩展名!很高兴它对你有用。【参考方案2】:

使用适用于 Azure 的 PHP SDK。

/ Create blob REST proxy.
$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);

// Get blob.
$blob = $blobRestProxy->getBlob("mycontainer", "myblob");
if ($blob) 
   //blob exists
 

【讨论】:

谢谢,我认为这适用于新的 SDK,但如果您使用的是 v4,我会看到我的答案,以另一种方式做到这一点。 这不起作用。如果 blob 不存在,则会抛出错误“BlobNotFound” 不能抛出错误,只能抛出异常。因此,请随时将任何更新的 SDK 功能编辑为 try catch (Exception)【参考方案3】:

使用 PHP SDK v4.10 的解决方案

http://phpazure.codeplex.com/

$storageClient = $this->azure->get_blob_storage();

                    //check if blob exists

        $exists = $storageClient->blobExists(<container name>, <blob name>);

进入 SDK 文件夹中的 blob.php 以查看 API 函数的完整列表。

【讨论】:

以上是关于检查 Azure Blob 存储中是不是存在 blob (php)的主要内容,如果未能解决你的问题,请参考以下文章

如何检查文件是不是存储在 Azure Blob 中

如何检查 Azure Blob 文件是不是存在

如何检查图像是不是在 Azure Blob 存储上发布?

Azure 存储:Blob:Python:获取指示符是不是存在 Blob

c# Azure MVC 从控制器调用 .Result 检查 blob 是不是存在

Azure 中的条件存在检查:拒绝策略