hyperf上传到oss报错问题解决方案
1 报错信息
defalut.ERROR: : RequestId: [97]
或者
defalut.ERROR: MissingContentLength: You must provide the Content-Length HTTP header
2 报错原因
可以看的出来阿里云的oss上传方法与 swoole的 hook_curl 出现了冲突。
解决办法
1 使用官方的filesystem
# 首先执行 composer require hyperf/filesystem # 使用阿里云 OSS 适配器时执行 composer require xxtime/flysystem-aliyun-oss # 使用 S3 适配器时执行 composer require league/flysystem-aws-s3-v3 composer require hyperf/guzzle # 使用七牛云(测试)适配器时执行 composer require overtrue/flysystem-qiniu # 使用内存适配器时执行 composer require league/flysystem-memory # 使用腾讯云 COS 适配器时执行 composer require overtrue/flysystem-cos
链接 https://hyperf.wiki/2.0/#/zh-cn/filesystem
2 不使用阿里oss的 uploadFile 方法
使用下面的方法
$file = $this->request->file('upload');
$resource= fopen($file->getRealPath(), 'r+');
if (!is_resource($resource)) { //错误处理 } $i = 0; $bufferSize = 1000000; // 1M while (!feof($resource)) { if (false === $buffer = fread($resource, $block = $bufferSize)) { return false; } $position = $i * $bufferSize; $size = $this->oss->appendObject($this->bucket, $path, $buffer, $position ); $i++; } fclose($resource);
或者
go(function()use($oss,$bucket,$filePath,$file){ if(!$oss->doesObjectexist($bucket,$filePath)){ $oss->putObject($bucket,$filePath,$file) } })
3 或者使用下面的composer包
composer require reasno/swoole-aliyunoss-addon