一、/composer.json文件添加配置
在require中添加"johnlui/aliyun-oss": "^2.2",
image.png二、/config/app.php添加配置
添加代码:
/*
|--------------------------------------------------------------------------
| Aliyun OSS
|--------------------------------------------------------------------------
| @Author: zhanhaisheng
*/
'City' => env('ALIOSS_CITY', null), // 地区
'NetworkType' => env('ALIOSS_NETWORKTYPE', null), // 网络类型
'IsInternal' => env('ALIOSS_ISINTERNAL', null), // 是否外网true内网false
'AccessKeyId' => env('ALIOSS_KEYID', null), // KeyId
'AccessKeySecret' => env('ALIOSS_KEYSECRET', null), // KeySecret
'BucketName' => env('ALIOSS_BUCKETNAME', null) , // bucket
'Path' => env('ALIOSS_PATH',null), //读取文件的路径
image.png
三、/.env文件中增加ALIOSS的配置
ALIOSS_CITY=杭州
ALIOSS_NETWORKTYPE=经典网络
ALIOSS_ISINTERNAL=false
ALIOSS_KEYID=xxxxxxxxxxxxxxxxxx
ALIOSS_KEYSECRET=xxxxxxxxxxxxxxxxxxxxxxxx
ALIOSS_BUCKETNAME=xxxxxx
ALIOSS_PATH=https://xxxxx.oss-cn-hangzhou.aliyuncs.com/
image.png
四、更新composer
composer update
操作视图:
Microsoft Windows [版本 10.0.17763.557]
(c) 2018 Microsoft Corporation。保留所有权利。
D:\>composer update
五、创建OSS类
放在/app/Services/OSS.php中,默认没有这个文件夹,自行创建。当然也可以放在其他文件夹中。
<?php
namespace App\Services;
/**
* @Author: zhanhaisheng
* @String: OSS文件存储
*/
use JohnLui\AliyunOSS;
use Exception;
use DateTime;
class OSS {
/* 城市名称:
*
* 经典网络下可选:杭州、上海、青岛、北京、张家口、深圳、香港、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
* VPC 网络下可选:杭州、上海、青岛、北京、张家口、深圳、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
*/
private $ossClient;
/**
* 私有初始化 API,非 API,不用关注
* @param boolean 是否使用内网
*/
public function __construct($isInternal = false)
{
if (config('app.NetworkType') == 'VPC' && !$isInternal) {
throw new Exception("VPC 网络下不提供外网上传、下载等功能");
}
$this->ossClient = AliyunOSS::boot(
config('app.City'),
config('app.NetworkType'),
$isInternal,
config('app.AccessKeyId'),
config('app.AccessKeySecret')
);
}
/**
* 使用外网上传文件
* @param string 上传之后的 OSS object 名称
* @param string 上传文件路径
* @return boolean 上传是否成功
*/
public static function upload($ossKey, $filePath, $options = [])
{
$oss = new OSS(config('app.IsInternal'));
$oss->ossClient->setBucket(config('app.BucketName'));
return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
}
/**
* 使用外网直接上传变量内容
* @param string bucket名称
* @param string 上传之后的 OSS object 名称
* @param string 上传的变量
* @return boolean 上传是否成功
*/
public static function uploadContent($ossKey, $content, $options = [])
{
$oss = new OSS(config('app.IsInternal'));
$oss->ossClient->setBucket(config('app.BucketName'));
return $oss->ossClient->uploadContent($ossKey, $content, $options);
}
/**
* 使用外网删除文件
* @param string bucket名称
* @param string 目标 OSS object 名称
* @return boolean 删除是否成功
*/
public static function deleteObject($ossKey)
{
$oss = new OSS(config('app.IsInternal'));
$oss->ossClient->setBucket(config('app.BucketName'));
return $oss->ossClient->deleteObject(config('app.BucketName'), $ossKey);
}
/**
* 复制存储在阿里云OSS中的Object
*
* @param string $sourceBuckt 复制的源Bucket
* @param string $sourceKey - 复制的的源Object的Key
* @param string $destBucket - 复制的目的Bucket
* @param string $destKey - 复制的目的Object的Key
* @return Models\CopyObjectResult
*/
public function copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
{
$oss = new OSS(config('app.IsInternal')); // 上传文件使用内网,免流量费
return $oss->ossClient->copyObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
}
/**
* 移动存储在阿里云OSS中的Object
*
* @param string $sourceBuckt 复制的源Bucket
* @param string $sourceKey - 复制的的源Object的Key
* @param string $destBucket - 复制的目的Bucket
* @param string $destKey - 复制的目的Object的Key
* @return Models\CopyObjectResult
*/
public function moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey)
{
$oss = new OSS(config('app.IsInternal')); // 上传文件使用内网,免流量费
return $oss->ossClient->moveObject($sourceBuckt, $sourceKey, $destBucket, $destKey);
}
public static function getUrl($ossKey)
{
$oss = new OSS();
$oss->ossClient->setBucket(config('app.BucketName'));
return $oss->ossClient->getUrl($ossKey, new \DateTime("+1 day"));
}
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);
}
/**
* 获取指定Object的元信息
*
* @param string $bucketName 源Bucket名称
* @param string $key 存储的key(文件路径和文件名)
* @return object 元信息
*/
public static function getObjectMeta($bucketName, $osskey)
{
$oss = new OSS();
return $oss->ossClient->getObjectMeta($bucketName, $osskey);
}
}
?>
六、具体使用OSS
use App\Services\OSS; //在使用的文件use这个类
示例,个人使用的一个基类的上传方法
/**
* OSS图片上传
*/
public function uploadImg(Request $request){
$file = $request->file('file');
// 判断图片有效性
if (!$file->isValid()) {
return $this->error('上传图片无效');
}
// 获取后缀
$ext = $file->getClientOriginalExtension();
// 随机生成图片名字
$name = uniqid(date('Ymd_')).str_random(3);
$filePath = $file->getRealPath();
$ossKey = 'sys/'.date('Y-m-d').'/'.$name.'.'.$ext;
//上传图片至OSS上
$result = OSS::upload($ossKey, $filePath);
return $result;
}
网友评论