laravel oss文件上傳到阿里云

需要自己注冊阿里云賬號并且開通oss服務(wù),建立Bucket存儲空間


image.png

image.png

image.png

使用composer在項(xiàng)目根目錄執(zhí)行以下命令 composer require johnlui/aliyun-oss:~2.0

image.png

構(gòu)建 Service 文件 需要自己手動建立 app/services/OSS.php

image.png

只需要修改下面的信息,變成自己的阿里云AccessKeyId AccessKeySecret就可以,注意OSS.php 文件中 private $city = ‘青島’; 所對應(yīng)的城市,要根據(jù)自己OSS相對應(yīng)的地區(qū)所選擇,如何查看自己的OSS地區(qū),請到阿里云OSS中查看,修改錯誤會導(dǎo)致無法連接到阿里云OSS服務(wù)器

<?php
namespace App\Services;
use JohnLui\AliyunOSS;
use Exception;
use DateTime;
class OSS {
  /* 城市名稱:
   *  
   *  經(jīng)典網(wǎng)絡(luò)下可選:杭州、上海、青島、北京、張家口、深圳、香港、硅谷、弗吉尼亞、新加坡、悉尼、日本、法蘭克福、迪拜
   *  VPC 網(wǎng)絡(luò)下可選:杭州、上海、青島、北京、張家口、深圳、硅谷、弗吉尼亞、新加坡、悉尼、日本、法蘭克福、迪拜
   */    
  private $city = '青島';
  // 經(jīng)典網(wǎng)絡(luò) or VPC
  private $networkType = '經(jīng)典網(wǎng)絡(luò)';
  
  private $AccessKeyId = '';
  private $AccessKeySecret = '';
  private $ossClient;
  /**
   * 私有初始化 API,非 API,不用關(guān)注
   * @param boolean 是否使用內(nèi)網(wǎng)
   */
  public function __construct($isInternal = false)
  {
    if ($this->networkType == 'VPC' && !$isInternal) {
      throw new Exception("VPC 網(wǎng)絡(luò)下不提供外網(wǎng)上傳、下載等功能");
    }
    $this->ossClient = AliyunOSS::boot(
      $this->city,
      $this->networkType,
      $isInternal,
      $this->AccessKeyId,
      $this->AccessKeySecret
    );
  }
  /**
   * 使用外網(wǎng)上傳文件
   * @param  string bucket名稱
   * @param  string 上傳之后的 OSS object 名稱
   * @param  string 上傳文件路徑
   * @return boolean 上傳是否成功
   */
  public static function publicUpload($bucketName, $ossKey, $filePath, $options = [])
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
  }
  /**
   * 使用阿里云內(nèi)網(wǎng)上傳文件
   * @param  string bucket名稱
   * @param  string 上傳之后的 OSS object 名稱
   * @param  string 上傳文件路徑
   * @return boolean 上傳是否成功
   */
  public static function privateUpload($bucketName, $ossKey, $filePath, $options = [])
  {
    $oss = new OSS(true);
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
  }
  /**
   * 使用外網(wǎng)直接上傳變量內(nèi)容
   * @param  string bucket名稱
   * @param  string 上傳之后的 OSS object 名稱
   * @param  string 上傳的變量
   * @return boolean 上傳是否成功
   */
  public static function publicUploadContent($bucketName, $ossKey, $content, $options = [])
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadContent($ossKey, $content, $options);
  }
  /**
   * 使用阿里云內(nèi)網(wǎng)直接上傳變量內(nèi)容
   * @param  string bucket名稱
   * @param  string 上傳之后的 OSS object 名稱
   * @param  string 上傳的變量
   * @return boolean 上傳是否成功
   */
  public static function privateUploadContent($bucketName, $ossKey, $content, $options = [])
  {
    $oss = new OSS(true);
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->uploadContent($ossKey, $content, $options);
  }
  /**
   * 使用外網(wǎng)刪除文件
   * @param  string bucket名稱
   * @param  string 目標(biāo) OSS object 名稱
   * @return boolean 刪除是否成功
   */
  public static function publicDeleteObject($bucketName, $ossKey)
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->deleteObject($bucketName, $ossKey);
  }
  /**
   * 使用阿里云內(nèi)網(wǎng)刪除文件
   * @param  string bucket名稱
   * @param  string 目標(biāo) OSS object 名稱
   * @return boolean 刪除是否成功
   */
  public static function privateDeleteObject($bucketName, $ossKey)
  {
    $oss = new OSS(true);
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->deleteObject($bucketName, $ossKey);
  }
  /**
   * -------------------------------------------------
   *
   * 
   *  下面不再分公網(wǎng)內(nèi)網(wǎng)出 API,也不注釋了,大家自行體會吧。。。
   *
   * 
   * -------------------------------------------------
   */
  public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
  {
    $oss = new OSS();
    return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
  }
  public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
  {
    $oss = new OSS();
    return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
  }
  // 獲取公開文件的 URL
  public static function getPublicObjectURL($bucketName, $ossKey)
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->getPublicUrl($ossKey);
  }
  // 獲取私有文件的URL,并設(shè)定過期時間,如 \DateTime('+1 day')
  public static function getPrivateObjectURLWithExpireTime($bucketName, $ossKey, DateTime $expire_time)
  {
    $oss = new OSS();
    $oss->ossClient->setBucket($bucketName);
    return $oss->ossClient->getUrl($ossKey, $expire_time);
  }
  public static function createBucket($bucketName)
  {
    $oss = new OSS();
    return $oss->ossClient->createBucket($bucketName);
  }
  public static function getAllObjectKey($bucketName)
  {
    $oss = new OSS();
    return $oss->ossClient->getAllObjectKey($bucketName);
  }
  public static function getObjectMeta($bucketName, $ossKey)
  {
    $oss = new OSS();
    return $oss->ossClient->getObjectMeta($bucketName, $ossKey);
  }
}
放入自動加載
 
在 composer.json 中 autoload -> classmap 處增加配置:
 
“autoload”: {
“classmap”: [
“app/services”
]
}

然后運(yùn)行 composer dump-autoload
獲取文件路徑

創(chuàng)建控制器類 Util/UploadController 控制器用于接收前臺上傳的圖片,上傳到阿里云OSS,并且拿到返回路徑。Bucket名稱名稱換成自己的
創(chuàng)建控制器類 Util/UploadController 控制器用于接收前臺上傳的圖片,上傳到阿里云OSS,并且拿到返回路徑。Bucket名稱名稱換成自己的

控制器的使用

namespace App\Http\Controllers\Util;
 
use App\Http\Controllers\Controller;
use App\Services\OSS;
use Illuminate\Http\Request;
 
class UploadController extends Controller
{
    public function upload(Request $request)
    {
    //獲取上傳的文件
    $file = $request->file('file');
    //獲取上傳圖片的臨時地址
    $tmppath = $file->getRealPath();
    //生成文件名
    $fileName = str_random(5) . $file->getFilename() . time() .date('ymd') . '.' . $file->getClientOriginalExtension();
    //拼接上傳的文件夾路徑(按照日期格式1810/17/xxxx.jpg)
    $pathName = date('Y-m/d').'/'.$fileName;
    //上傳圖片到阿里云OSS
    OSS::publicUpload('Bucket名稱', $pathName, $tmppath, ['ContentType' => $file->getClientMimeType()]);
    //獲取上傳圖片的Url鏈接
    $Url = OSS::getPublicObjectURL('Bucket名稱', $pathName);
    // 返回狀態(tài)給前端,Laravel框架會將數(shù)組轉(zhuǎn)成JSON格式
    return ['code' => 0, 'msg' => '上傳成功', 'data' => ['src' => $Url]];
}
}
//模型使用,控制器調(diào)取使用即可
<?php
 
namespace App\Model;
use App\Services\OSS;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
 
class design extends Model
{
    protected $table="";
    public $timestamps = false;
 
    public static function uploadOss($file)
    {
        if (!$file) {
            exit("請上傳圖片");
        }
        // 文件是否上傳成功
        if ($file->isValid()) {
            // 獲取文件相關(guān)信息
            $originalName = $file->getClientOriginalName(); // 文件原名
            $ext = $file->getClientOriginalExtension();     // 擴(kuò)展名
            $realPath = $file->getRealPath();   //臨時文件的絕對路徑
            $type = $file->getClientMimeType();     // image/jpeg
            $content = date('Y-m-d H:i:s') . '-' . uniqid() . '.' . $ext;
            //上傳圖片到阿里云OSS
            OSS::publicUpload('$Bucket名字', $content,  $realPath, ['ContentType' => $file->getClientMimeType()]);
            //獲取上傳圖片的Url鏈接
            $Url = OSS::getPublicObjectURL('$Bucket名字',  $content);
            // 返回結(jié)果
            if($Url){
                return $Url;
            }else{
                return exit('文件上傳失敗');
            }
        }
    }
 
}

原文鏈接:https://blog.csdn.net/qq_43638176/article/details/96489427

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容