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

 

 
posted @ 2020-11-13 00:35  X__cicada  阅读(1801)  评论(0编辑  收藏  举报