我尝试使用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);
答案 0 :(得分:1)
如评论中所述,请更改以下代码行:
$options = new CreateBlobOptions();
到
$options = new CreateBlockBlobOptions();
这将解决问题。
基本上,您收到此错误的原因是因为SDK中的重大变化,其中包括在所有上传/下载方法中使用事务MD5。但是,它通过CreateBlockBlobOptions
在getUseTransactionalMD5()
课程中公开,而不是在CreateBlobOptions
课程中公开。因为您使用的是后者而不是前者,所以您收到此错误消息。