从Azure网站中的Blob存储中获取损坏的图像

时间:2013-05-02 16:40:57

标签: php azure codeigniter-2 azure-storage

我的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...

在我的本地计算机上,每次刷新页面,或浏览有图像的页面时,它们都可以正常加载。但是,当我将我的应用程序上传到蔚蓝的网站时,我经常会看到损坏的图像,然后每次出现图像时都需要“刷新页面”。这是在我点击想要显示图像的div上的inspect元素后,尽管链接到图像是正确的。

我在3个月的试用版中使用azure网站的“共享版本”。 PHP版本与我的本地机器以及.net框架完全相同。

有谁知道为什么会这样?

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

解决方案:

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

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

在第一行添加-60。它应该工作。

1 个答案:

答案 0 :(得分:1)

看起来你回答了自己的问题。它不是延迟,因为它是时钟漂移和计算节点与存储节点之间的时间同步。在您希望链接开​​始工作之前将开始时间设置为一两分钟始终是个好主意(假设您打算让链接“正常”工作)。没有伤害的开始时间可以追溯到时间。