<?php
namespace App\Services;
use App\Exceptions\ApiException;
use Illuminate\Http\UploadedFile;
use Overtrue\CosClient\ObjectClient;
class CosService
{
protected $objectClient;
private $config;
public function __construct()
{
$this->config = config('cos');
$this->objectClient = new ObjectClient($this->config);
}
public function uploadFile(string $dir, UploadedFile $file): string
{
if (env('APP_ENV') != 'pro') {
$dir = 'test/' . $dir;
}
$key = $dir . $this->genFileName($file);
try {
$this->objectClient->putObject($key, $file->getContent());
} catch (\Exception $exception) {
throw new ApiException($exception->getMessage(), 1);
}
return $this->config['upload_domain'] . $key;
}
private function genFileName(UploadedFile $file): string
{
$clientOriginalName = $file->getClientOriginalName();
$fileNameArr = explode('.', $clientOriginalName);
$ex = end($fileNameArr);
$rand = time() + rand(0000, 9999);
$uniqName = strtoupper(md5((string)$rand));
$originName = $file->getClientOriginalName();
return sprintf('%s_%s.%s', $uniqName, $originName, $ex);
}
}