需要自己注冊阿里云賬號并且開通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