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