You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure PHP SDK上传视频块Blob时出现未定义方法错误

解决Azure PHP SDK上传Blob时getUseTransactionalMD5()未定义的致命错误

我来帮你搞定这个头疼的问题!先理清楚你遇到的情况:上传50MB左右的MP4视频时,只要给CreateBlobOptions设置video/mp4这个MIME类型,就会触发这个致命错误,不设置选项反而能正常上传。

问题根源

这个错误本质是SDK版本不匹配:你当前用的microsoft/azure-storage-blob包版本里,CreateBlobOptions类根本没有getUseTransactionalMD5()这个方法,但BlobRestProxy.php的1941行却硬要调用它。为啥不设置选项就没事?因为不设置时SDK走了默认逻辑分支,没触发到这段有问题的代码;一旦你加了MIME类型的配置,代码路径就走到了调用这个不存在方法的地方,直接报错。

具体解决办法

1. 优先更新SDK到兼容版本(最稳妥)

直接用Composer把Azure Blob SDK更到最新稳定版,新版本里CreateBlobOptions肯定包含这个方法,能从根本上解决问题:

composer update microsoft/azure-storage-blob

更新完之后再跑一遍上传代码,应该就能正常工作了。

2. 临时手动补全方法(紧急修复用,不推荐长期用)

如果暂时没法更新SDK,比如项目依赖限制,可以临时给CreateBlobOptions类补个方法救急:
打开vendor/microsoft/azure-storage-blob/src/Blob/Models/CreateBlobOptions.php,先确认有没有$_useTransactionalMD5这个私有属性,没有的话先加上:

private $_useTransactionalMD5 = false;

然后添加上对应的getter方法:

/**
 * Gets whether to use transactional MD5
 *
 * @return bool
 */
public function getUseTransactionalMD5()
{
    return $this->_useTransactionalMD5;
}

⚠️ 注意:这种改源码的方式是临时的,下次跑composer install或update就会被覆盖,所以还是优先更SDK。

3. 调整选项设置逻辑(兼容旧版本的小技巧)

要是更新SDK后还有问题,或者想兼容旧版本,可以在设置MIME类型时,先检查方法是否存在再操作:

$options = new \MicrosoftAzure\Storage\Blob\Models\CreateBlobOptions();
$options->setContentType('video/mp4');

// 显式设置useTransactionalMD5(如果方法存在的话)
if (method_exists($options, 'setUseTransactionalMD5')) {
    $options->setUseTransactionalMD5(false);
}

这样能避免代码走到调用不存在方法的分支。

验证

修复完之后,再上传那个带MIME类型设置的50MB视频,确认错误消失,文件成功传到Azure Blob存储里就大功告成啦!

内容的提问来源于stack exchange,提问作者dinwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:30:23