【发布时间】:2018-09-20 17:43:13
【问题描述】:
我尝试使用 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 类型(在本例中为视频/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);
【问题讨论】:
-
其他上传成功的文件有多大?另外,您使用的是哪个版本的 SDK?
-
这不是大小,因为它甚至在开始上传之前就崩溃了。我们通过 composer 使用最新的 SDK。这是 composer.json
"require": { "php": ">=5.2.4", "microsoft/azure-storage-queue": "*", "microsoft/azure-storage-blob": "*" }这实际上是一个问题,因为特性是在 5.4 中添加到 PHP 中的,但这将允许此代码在 PHP 5.2.4 上运行,这无论如何都会破坏它。我们的服务器是在 5.6 上设置的,所以我们现在很好,很快我们将进入 5.7。 -
我对我的最后一条评论进行了更正。 30 MB 的视频可以正常工作,但较大的视频会失败,因此它可能也有大小。
-
请尝试将这行代码
$options = new CreateBlobOptions();改为$options = new CreateBlockBlobOptions(); -
修复了它。谢谢你,高拉夫。
标签: php azure azure-storage