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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM