hyperf oss/cos 檔案上傳擴充套件

lyxxxh發表於2020-04-02

更新

  1. 移除本地儲存, 要儲存在本地,用hf的方法就好了。

  2. 增加cos儲存

  3. 增加put方法

  4. 改善之前的程式碼

擴充套件原始碼

安裝

  1. composer require lyxxxh/filestore
  2. php bin/hyperf.php vendor:publish lyxxxh/filestore // 釋出配置
  3. 配置config/autoload/filestore.php //配置oss
    'oss' => [
         'appid' => '',
         'appsec' => '',
         'bucket' => '',
         'endpoint' => '',
         'socket_timeout' => '5184000', // 設定Socket層傳輸資料的超時時間
         'connection_timeout' => '10', //建立連結的超時時間
         'save_path' => 'tem/storage/',  //儲存目錄
    ]

控制器使用

use Xxh\FileStore\Service\FileStoreAbstract;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;/**
* 檔案管理
* @Inject
* @var FileStoreAbstract
*/
private $file;//接收檔案上傳
public function filestore(RequestInterface $request, ResponseInterface $response)
{
    $path = $this->file->store(
     $request->file('img')
    );
    return $this->file->url($path);    
    //http://r-card.oss-cn-beijing.aliyuncs.com/tem/storage/4b7dd3231926a340ab84d53316f17e03.png?OSSAccessKeyId=LTAI4T18SS9GCtpf&Expires=1585834537&Signature=V7OSZEQaWGSG3eYgHUXmXNwTSKQ%3D
}public function put()
{
    $path = $this->file->put('1.txt','Hello World');
    return $this->file->url($path);
          //http://r-card.oss-cn-beijing.aliyuncs.com/tem/storage/1.txt?OSSAccessKeyId=LTAI4T18SS9GCtpf&Expires=1585834478&Signature=3%2FOi1YB1ggMIet%2F03Q0AnNJ4Aus%3D

}

使用cos

  1. 新增config/autoload/dependencies.php配置
    Xxh\FileStore\Service\FileStoreAbstract::class => Xxh\FileStore\Service\CosFileStoreService::class 
  2. 配置config/autoload/filestore.phpcos的資訊

擴充套件方法 或者 重寫 (以oss為例)

  1. 隨便建立一個檔案 例:app/Services/OssFileStoreService.php

  2. 修改config/autoload/dependencies.php

    Xxh\FileStore\Service\FileStoreAbstract::class => App\Services\OssFileStoreService::class
  3. OssFileStoreService.php內容

class OssFileStoreService extends Xxh\FileStore\Service\OssFileStoreService
{
//重寫oss put方法
public function put($filename,$str)
{
    ..... 
}

//新增oss delObject方法  
public function delObject($filename) 
{ 
    $this->getClient()->deleteObjects($this->config['bucket'],$filename);  
}

}

擴充套件提供的方法

FileStoreAbstract.php

超過2m無法上傳

預設只能上傳2M的檔案,
請看swoole文件 (package_max_length)

可在config/server.php的

settings =>[
    'package_max_length' => 5 * 1024 * 1024 , //5M
    .....
]
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章