Laravel 11+Backblaze B2(S3兼容):PUT请求报错“不支持x-amz-checksum-crc32头”
解决Laravel原生S3驱动对接Backblaze B2时的校验头错误
问题根源是Laravel底层依赖的AWS SDK默认会自动添加x-amz-checksum-crc32校验头,但Backblaze B2的S3兼容API不支持该请求头,导致上传报错。以下是两种不依赖第三方库的解决方式:
全局配置(推荐)
直接在config/filesystems.php的B2磁盘配置中添加options参数,禁用自动校验头:
'disks' => [ 'b2' => [ 'driver' => 's3', 'key' => env('B2_KEY'), 'secret' => env('B2_SECRET'), 'region' => env('B2_REGION', 'auto'), 'bucket' => env('B2_BUCKET'), 'endpoint' => 'https://s3.ca-east-006.backblazeb2.com', 'use_path_style_endpoint' => true, // 添加配置禁用自动校验算法 'options' => ['ChecksumAlgorithm' => null], ], ],
若项目开启了配置缓存,修改后执行以下命令刷新缓存:
php artisan config:cache
单请求配置
如果仅需针对特定上传请求禁用校验头,可在put方法的第三个参数中指定选项:
Storage::disk('b2')->put('some-path/file.png', $fileContent, [ 'ChecksumAlgorithm' => null ]);
两种方式均可阻止AWS SDK自动发送x-amz-checksum-crc32头,适配Backblaze B2的S3兼容API。
内容的提问来源于stack exchange,提问作者Dark knight
相关产品推荐
相关产品推荐

