从Azure网站的blob存储中获取破碎的图像


Getting broken images from blob storage in Azure websites

我的php代码似乎是正确的(与blob存储对话的部分)。

        //talk to blob storage, get links, based on file name
                $storageClient = $this->azure->get_blob_storage();
foreach($result as $photo)
{
$sharedAccessUrl[] = $storageClient->generateSharedAccessUrl(
               'container',
              $photo['File'],
               'b', 
               'r',
               $storageClient ->isoDate(time()),
               $storageClient ->isoDate(time() + 3000)
              );

}
      foreach($sharedAccessUrl as $item)
      {
     $pictures[] = $item;
      }

这获得所有的绝对url链接,然后我将其存储在一个数组中,将其传递给视图并检索图像。这样的:

<img src="<?php echo $pictures[$i]; ?>" height=100px width="100px">
(where pictures[$i] = http://azure blobstorage etc...

在我的本地机器上,每次我刷新页面,或者浏览有图像的页面时,它们都加载得很好。然而,当我将我的应用程序上传到azure网站时,我经常会得到破碎的图像,然后每次图像出现时都需要"刷新页面"。这是尽管链接到图像是正确的,在我点击检查元素的div图像应该出现后。

我正在使用azure网站的"共享版本",从3个月的试用。PHP版本与我的本地机器完全相同,以及。net框架。

有人知道为什么会发生这种情况吗?

我已经检查了日志,但是没有帮助。

解决方案:

在blob存储和azure网站上设置的时间似乎有延迟。

           $storageClient ->isoDate(time()-60),
           $storageClient ->isoDate(time() + 3000)

在第一行添加-60。应该可以的

看来你回答了自己的问题。与其说是延迟,不如说是时钟漂移以及计算节点和存储节点之间的时间同步。将开始时间设置为比您希望链接开始工作的时间早一到两分钟总是一个好主意(假设您希望链接"现在"开始工作)。