須要本身註冊阿里雲帳號而且開通oss服務,創建Bucket存儲空間,此步驟不作演示php
1、composer安裝:使用composer在項目根目錄執行如下命令 前端
composer require johnlui/aliyun-oss:~2.0
2、構建 Service 文件 須要本身手動創建 app/services/OSS.phpjson
修改配置信息,改成本身的阿里雲AccessKeyId AccessKeySecret數組
注意OSS.php 文件中 private $city = ‘青島’; 所對應的城市,要根據本身OSS相對應的地區所選擇服務器
如何查看本身的OSS地區,請到阿里雲OSS中查看,修改錯誤會致使沒法鏈接到阿里雲OSS服務器
網絡
OSS.php文件:app
<?php namespace App\services; use JohnLui\AliyunOSS; use Exception; use DateTime; class OSS { /* 城市名稱: * * 經典網絡下可選:杭州、上海、青島、北京、張家口、深圳、香港、硅谷、弗吉尼亞、新加坡、悉尼、日本、法蘭克福、迪拜 * VPC 網絡下可選:杭州、上海、青島、北京、張家口、深圳、硅谷、弗吉尼亞、新加坡、悉尼、日本、法蘭克福、迪拜 */ private $city = ''; // 經典網絡 or VPC private $networkType = '經典網絡'; private $AccessKeyId = ''; private $AccessKeySecret = ''; private $ossClient; /** * 私有初始化 API,非 API,不用關注 * @param boolean 是否使用內網 */ public function __construct($isInternal = false) { if ($this->networkType == 'VPC' && !$isInternal) { throw new Exception("VPC 網絡下不提供外網上傳、下載等功能"); } $this->ossClient = AliyunOSS::boot( $this->city, $this->networkType, $isInternal, $this->AccessKeyId, $this->AccessKeySecret ); } /** * 使用外網上傳文件 * @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); } /** * 使用阿里雲內網上傳文件 * @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); } /** * 使用外網直接上傳變量內容 * @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); } /** * 使用阿里雲內網直接上傳變量內容 * @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); } /** * 使用外網刪除文件 * @param string bucket名稱 * @param string 目標 OSS object 名稱 * @return boolean 刪除是否成功 */ public static function publicDeleteObject($bucketName, $ossKey) { $oss = new OSS(); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->deleteObject($bucketName, $ossKey); } /** * 使用阿里雲內網刪除文件 * @param string bucket名稱 * @param string 目標 OSS object 名稱 * @return boolean 刪除是否成功 */ public static function privateDeleteObject($bucketName, $ossKey) { $oss = new OSS(true); $oss->ossClient->setBucket($bucketName); return $oss->ossClient->deleteObject($bucketName, $ossKey); } /** * ------------------------------------------------- * * * 下面再也不分公網內網出 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,並設定過時時間,如 \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
3、在 composer.json 中 autoload -> classmap 處增長配置 框架
在終端根目錄下進行composer操做:測試
composer dump-autoload
4、控制器的使用方法
建立控制器類 Api/UploadController 控制器用於接收前臺上傳的圖片,上傳到阿里雲OSS,而且拿到返回路徑。Bucket名稱名稱換成本身的
namespace App\Http\Controllers\Api; 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 = rand(1000,9999) . $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); // 返回狀態給前端,Laravel框架會將數組轉成JSON格式 return ['code' => 0, 'msg' => '上傳成功', 'data' => ['src' => $Url]]; } }
寫路由測試:
而後返回信息和圖片的URL:
而後就OK啦