概念理解
阿里有一套自己的相关概念,既然要用人家的产品,就要按照人家的要求来。
Bucket存储空间
Object需要存储的对象
Region地域
Endpoint访问域名
Region和Endpoint要相对应,杭州 Region 的外网 Endpoint 是 oss-cn-hangzhou.aliyuncs.com,内网 Endpoint 是 oss-cn-hangzhou-internal.aliyuncs.com。这个在阿里文档中也有解释。
AccessKeyId和
AccessKeySecret是加密解密及身份标识所需数据,每个账号都有,自己去控制台翻翻。
拿到这几个数据后,再下载阿里oss对象存储sdk,就可以进行代码编写操作了。
不过在这之前还是要做几步简单操作
1 去管理控制台创建一个存储空间bucket,一般选标准存储类型,权限选公共读,私有写。
2 设置跨域规则如下图,有特殊要求具体处理。
代码部分
相应类
<?php
namespace PFinal\Storage;
use OSS\Core\OssException;
use OSS\OssClient;
class AliOss
{
protected $id;
protected $secret;
protected $endpoint;
protected $bucket;
protected $maxSize = 5; //单位G 阿里单次上传文件限制
public $message;
protected $fileName;
public function __construct(
array $config = array())
{
foreach (
$config as $key => $item)
{
$this->$key = $item;
}
}
/**
* 上传文件
*
* @param object $file
* @param string $key
* @return bool
*/
public function put(
$file, $key)
{
// 允许上传文件大小 (G)
$maxSize = $this->maxSize;
//检查文件大小
if (
$file->getClientSize()
> $maxSize * 1024 * 1024 * 1020)
{
$this->error = '文件大小不能超过' . $maxSize . 'G';
return false;
}
//本地临时文件
$tempPath = $file->getPathName()
;
//原扩展
$originalExtension = $file->getClientOriginalExtension()
;
//新文件名
$newName = $key . uniqid()
. '.' . $originalExtension;
//初始化阿里oss
$ossClient = new OssClient(
$this->id, $this->secret, $this->endpoint)
;
//上传
try {
$ossClient->uploadFile(
$this->bucket, $newName, $tempPath)
;
}
catch (
OssException $e)
{
$this->message = $e->getMessage()
;
return false;
}
$this->fileName = $newName;
return true;
}
/**
* 返回文件外链前缀 即除文件名部分
*
* @return string
*/
public function preUrl()
{
return 'http://' . $this->bucket . '.' . $this->endpoint . '/';
}
/**
* 返回文件文件名
*
* @return string
*/
public function object()
{
return $this->fileName;
}
/**
* 删除单个文件
*
* @param string $object 非显示url 纯文件名
* @return string
*/
public function deleteObject(
$object)
{
$ossClient = new OssClient(
$this->id, $this->secret, $this->endpoint)
;
try {
$ossClient->deleteObject(
$this->bucket, $object)
;
}
catch (
OssException $e)
{
$this->message = $e->getMessage()
;
return false;
}
return true;
}
}
具体调用
//用户上传文件
$file = $request->files->get(
'avatar')
;
$aliOss = new AliOss(
$app[
'ali_oss'])
;
//oss
if (
$file != null)
{
if (
$aliOss->put(
$file, 'pathway'))
{
//用户头像存在 删除oss中已有对象
if (
!empty(
$user[
'avatar']))
{
$aliOss->deleteObject(
$user[
'avatar'])
;
}
$data[
'avatar']
= $aliOss->object()
;
}
else {
return Json::renderWithFalse(
'修改失败')
;
}
}
注意
上传成功后的资源完整链接如下:
http://somefiles.oss-cn-shenzhen.aliyuncs.com/pathway5971a374da161.jpg
其中somefiles为bucket名称
oss-cn-shenzhen.aliyuncs.com为endpoint名称
pathway5971a374da161.jpg为后台生成的资源名称
前端显示需要完整链接,但是删除功能,只需要传该资源名称就行,不需要带bucket及endpoint名称,否则删除不了。
如果对你有帮助,请打赏1元买水喝。
转载请注明原文地址: https://www.6miu.com/read-23046.html