fastadmin将图片上传至cos对象存储
首先需要在项目里使用composer安装qcloud/cos-sdk-v5库。
composer require qcloud/cos-sdk-v5
然后需要写一个公共的上传本地文件到cos的方法。
/**
* 上传文件到cos
* @param string $file 文件
* @param string $key 文件名称,完整路径
* @return false|string
*/
function uploadCos($file, $key = '')
{
if (!file_exists($file)) {
return false;
}
$body = file_get_contents($file);
if (empty($body)) {
$body = '';
}
if (empty($key)) {
$key = md5($file);
}
$region = Env::get('cos.region');
$secret_id = Env::get('cos.secret_id');
$secret_key = Env::get('cos.secret_key');
$bucket = Env::get('cos.bucket');
if (empty($region) || empty($secret_id) || empty($secret_key) || empty($bucket)) {
return false;
}
$cosClient = new Qcloud\Cos\Client(array(
'region' => $region,
'credentials' => array(
'secretId' => $secret_id,
'secretKey' => $secret_key
)
));
try {
$result = $cosClient->putObject(
array(
'Bucket' => $bucket,
'Key' => $key,
'Body' => $body
)
);
if (!empty($result['Location'])) {
if (!preg_match('/^http/i', $result['Location'])) {
$result['Location'] = 'https://' . $result['Location'];
}
return $result['Location'];
}
} catch (\Exception $e) {
}
return false;
}
你可以在fastadmin中找到以下行为代码。
\think\Hook::listen("upload_after", $attachment);
所以,我们只需要监听那个行为事件即可。当然,如果你是自己实现的上传方法,也可以直接调用云存储方法或者调用上面的行为代码。
修改application/tags.php文件,增加以下代码
'upload_after' => [
'app\\common\\behavior\\Upload',
],
然后编写行为执行代码,文件位置为:application/common/behavior/Upload.php
<?php
namespace app\common\behavior;
class Upload
{
/**
* 上传文件到cos
* @param $params
* @return void
*/
public function run(&$params)
{
if (!empty($params->url)) {
if (file_exists(ROOT_PATH . 'public' . $params->url)) {
$result = uploadCos(ROOT_PATH . 'public' . $params->url, $params->url);
if (!empty($result)) {
$params->url = $result;
}
}
}
}
}