package and github
https://packagist.org/packages/johnlui/aliyun-oss
https://github.com/johnlui/AliyunOSS
适应 laravel7 版本的请看
https://github.com/johnlui/AliyunOSS-Laravel7
操作一波
composer require johnlui/aliyun-oss
新建配置文件 config/alioss.php,填充下边的 code 。
<?php
return [
'AccessKeyId' => env('ALIOSS_KEYID', null), // key
'AccessKeySecret' => env('ALIOSS_KEYSECRET', null), // secret
'BucketName' => env('ALIOSS_BUCKETNAME', null) // bucket
];
并且在 .env.example 中加入下边的配置(养成好的习惯)。
# OSS 配置
ALIOSS_KEYID=
ALIOSS_KEYSECRET=
ALIOSS_BUCKETNAME=
配置好了后,然后新建 app/Services/Oss.php 文件,填充以下内容。
https://github.com/johnlui/AliyunOSS/blob/master/example/OSS.php
如果 bucketName 唯一,就可以不用用传参的方式来处理此事情。
<?php
namespace App\Services;
use JohnLui\AliyunOSS;
use Exception;
use DateTime;
class Oss
{
/**
* 城市名称:
* 经典网络下可选:杭州、上海、青岛、北京、张家口、深圳、香港、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
* VPC 网络下可选:杭州、上海、青岛、北京、张家口、深圳、硅谷、弗吉尼亚、新加坡、悉尼、日本、法兰克福、迪拜
*/
private $city = '上海';
private $networkType = '经典网络';
private $ossClient;
public function __construct($isInternal = false)
{
if ($this->networkType == 'VPC' && !$isInternal) {
throw new Exception("VPC 网络下不提供外网上传、下载等功能");
}
$this->ossClient = AliyunOSS::boot(
$this->city,
$this->networkType,
$isInternal,
config('alioss.AccessKeyId'),
config('alioss.AccessKeySecret')
);
}
/**
* 使用外网上传文件
* @param string bucket名称
* @param string 上传之后的 OSS object 名称
* @param string 上传文件路径
* @return boolean 上传是否成功
*/
public static function publicUpload($ossKey, $filePath, $options = [])
{
$oss = new OSS();
$oss->ossClient->setBucket(config('alioss.BucketName'));
return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
}
/**
* 使用阿里云内网上传文件
* @param string bucket名称
* @param string 上传之后的 OSS object 名称
* @param string 上传文件路径
* @return boolean 上传是否成功
*/
public static function privateUpload($ossKey, $filePath, $options = [])
{
$oss = new OSS(true);
$oss->ossClient->setBucket(config('alioss.BucketName'));
return $oss->ossClient->uploadFile($ossKey, $filePath, $options);
}
/**
* 使用外网直接上传变量内容
* @param string bucket名称
* @param string 上传之后的 OSS object 名称
* @param string 上传的变量
* @return boolean 上传是否成功
*/
public static function publicUploadContent($ossKey, $content, $options = [])
{
$oss = new OSS();
$oss->ossClient->setBucket(config('alioss.BucketName'));
return $oss->ossClient->uploadContent($ossKey, $content, $options);
}
/**
* 使用阿里云内网直接上传变量内容
* @param string bucket名称
* @param string 上传之后的 OSS object 名称
* @param string 上传的变量
* @return boolean 上传是否成功
*/
public static function privateUploadContent($ossKey, $content, $options = [])
{
$oss = new OSS(true);
$oss->ossClient->setBucket(config('alioss.BucketName'));
return $oss->ossClient->uploadContent($ossKey, $content, $options);
}
/**
* 使用外网删除文件
* @param string bucket名称
* @param string 目标 OSS object 名称
* @return boolean 删除是否成功
*/
public static function publicDeleteObject($ossKey)
{
$oss = new OSS();
$oss->ossClient->setBucket(config('alioss.BucketName'));
return $oss->ossClient->deleteObject($ossKey);
}
/**
* 使用阿里云内网删除文件
* @param string bucket名称
* @param string 目标 OSS object 名称
* @return boolean 删除是否成功
*/
public static function privateDeleteObject($ossKey)
{
$oss = new OSS(true);
$oss->ossClient->setBucket(config('alioss.BucketName'));
return $oss->ossClient->deleteObject(config('alioss.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);
}
}
无需配置,保证目录 App/Services 和命名空间 namespace App\Services; 一致即可自动加载。
更多 options 等待你去填充 https://github.com/johnlui/AliyunOSS/blob/master/src/oss/src/Aliyun/OSS/OSSClient.php