使用PHP SDK在Azure上将视频文件作为块blob上载时出错

时间:2018-04-11 01:03:39

标签: php azure azure-storage

我尝试使用Azure的PHP SDK上传大小接近50 MB的视频。

我遇到了这个错误:

PHP Fatal error:  Call to undefined method MicrosoftAzure\\Storage\\Blob\\Models\\CreateBlobOptions::getUseTransactionalMD5() in /var/www/<domain>/vendor/microsoft/azure-storage-blob/src/Blob/BlobRestProxy.php on line 1941

只有在我通过blob选项设置正确的mime类型(在这种情况下为video / mp4)时才会发生这种情况。如果我上传相同的视频而不设置blob选项,那么它可以正常工作。即使将blob选项设置为video / mp4,许多其他视频也能正常工作。错误让我失望。

在这种情况下,任何猜测为什么它将getUseTransactionalMD5视为未定义的方法?

这是最小代码

use MicrosoftAzure\Storage\Blob\BlobRestProxy;
use MicrosoftAzure\Storage\Common\Exceptions\ServiceException;
$connString = "DefaultEndpointsProtocol=http;AccountName=" . AZURE_ACCOUNTNAME . ";AccountKey=" . AZURE_KEY;
$blobRestProxy = BlobRestProxy::createBlobService($connString);
$content = fopen($file['tmp_name'], "r");
$contentType = "video/mp4";
$options = new CreateBlobOptions();
$options->setContentType($contenttype);
blobRestProxy->createBlockBlob("mycontainer", "myblob", $content, $options);

1 个答案:

答案 0 :(得分:1)

如评论中所述,请更改以下代码行:

$options = new CreateBlobOptions();

$options = new CreateBlockBlobOptions();

这将解决问题。

基本上,您收到此错误的原因是因为SDK中的重大变化,其中包括在所有上传/下载方法中使用事务MD5。但是,它通过CreateBlockBlobOptionsgetUseTransactionalMD5()课程中公开,而不是在CreateBlobOptions课程中公开。因为您使用的是后者而不是前者,所以您收到此错误消息。