Téléchargement et signature de fichiers OSS
Je crois que dans le développement quotidien, vous utilisez souvent des fonctions telles que le téléchargement et le téléchargement de fichiers cloud. Cependant, Alibaba Cloud et Huawei Cloud, le propre stockage de Laravel, couramment utilisés, ne disposent pas d'un support convivial. par défaut.
Il se trouve que le récent processus de migration vers le cloud a suscité toutes sortes de nausées, impliquant principalement l'interface de téléchargement et de signature. Les codes clés pour le téléchargement et la signature de fichiers dans l'environnement cloud OSS sont spécialement enregistrés pour référence.
Commande d'installation du package associée :
// 阿里云oss composer require aliyuncs/oss-sdk-php // 华为云obs composer require obs/esdk-obs-php
Veuillez faire attention à la version du package et si elle est applicable à la version php.
.env Éléments de configuration :
# OSS相关配置 OSS_DRIVER=HW_OBS #华为OBS OSS_HW_ENDPOINT=https://obs.cn-east-3.myhuaweicloud.com OSS_HW_KEY=ME0AVBTNJTSJB2LH0EGI OSS_HW_SECRET=eCGffrwdx3Rt5QEmKbtEvruvGgg1mCUjMsnHfjWo OSS_HW_BUCKET=pub-obs-test-1 #阿里云 OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.com OSS_KEYID=LTAI4Ftno9DsfiVHADX73osa OSS_KEYSECRET=vo9KuqgaDN727eOOz1tDg77Egeg7wE OSS_BUCKET=xgimi-ipr
Code :
1. Déclaration d'interface
<?php namespace App\Service\OSS; interface IOSS { /** * 上传 * * @param $fullFileName * @param $filePath * @return mixed */ public function publicUpload($fullFileName, $filePath); /** * url验签、下载 * * @param $fullFileName | 含前缀的完整url文件名 * @param $expires | 过期时效 * @return mixed */ public function getUrl($fullFileName, $expires); /** * 可替换url域名 * * @param $url * @return mixed */ public function replaceUrl($url); }
2. Implémentation d'Alibaba OSS
<?php namespace App\Service\OSS; use OSS\OssClient; class AliOSS implements IOSS { private $endPoint; private $keyId; private $secret; private $bucket; private $ossClient; private $expires = 3 * 24 * 3600; private $aliHost = ''; private $myHost = ''; public function __construct() { $this->endPoint = env("OSS_ENDPOINT"); $this->keyId = env("OSS_KEYID"); $this->secret = env("OSS_KEYSECRET"); $this->bucket = env("OSS_BUCKET"); try { $this->ossClient = new OssClient($this->keyId, $this->secret, $this->endPoint); } catch (\Exception $e) { } } /** * 上传 * * @param $fullFileName * @param $filePath * @return mixed * @throws \Exception */ public function publicUpload($fullFileName, $filePath) { return $this->ossClient->uploadFile($this->bucket, $fullFileName, $filePath); } /** * url验签、下载 * * @param $fullFileName * @param $expires | 过期时效 * @return mixed * @throws \Exception */ public function getUrl($fullFileName, $expires) { $expires = $expires ? $expires : $this->expires; $signUrl = $this->ossClient->signUrl($this->bucket, $fullFileName, $expires); return $signUrl; } /** * 替换url域名 * * @param $url * @return mixed */ public function replaceUrl($url) { return str_replace($this->aliHost, $this->myHost, $url); } }
3. rre errree
Si vous avez le temps, vous pouvez le compléter avec des interfaces fonctionnelles et enrichir davantage de capacités d'interface cloud.Pièce jointe :
Package composer : https://packagist.org/packages/league/flysystem
<?php namespace App\Service\OSS; use Obs\ObsClient; class HuaweiOBS implements IOSS { private $endPoint; private $key; private $secret; private $bucket; private $obsClient; private $expires = 3 * 24 * 3600; private $hwHost = ''; private $myHost = ''; public function __construct() { $this->endPoint = env("OSS_HW_ENDPOINT"); $this->key = env("OSS_HW_KEY"); $this->secret = env("OSS_HW_SECRET"); $this->bucket = env("OSS_HW_BUCKET"); try { $this->obsClient = new ObsClient(['key' => $this->key, 'secret' => $this->secret, 'endpoint' => $this->endPoint]); } catch (\Exception $e) { } } /** * 上传 * * @param $fullFileName * @param $filePath * @return mixed */ public function publicUpload($fullFileName, $filePath) { $res = $this->obsClient->putObject([ 'Bucket' => $this->bucket, 'Key' => $fullFileName, 'SourceFile' => $filePath ]); return $res; } /** * url验签、下载 * * @param $fullFileName * @param $expires | 过期时效 * @return mixed * @throws \Exception */ public function getUrl($fullFileName, $expires) { $expires = $expires ? $expires : $this->expires; // 生成下载对象的带授权信息的URL $res = $this->obsClient->createSignedUrl([ 'Method' => 'GET', 'Bucket' => $this->bucket, 'Key' => $fullFileName, 'Expires' => $expires ]); return $res['SignedUrl']; } /** * 替换url域名 * * @param $url * @return mixed */ public function replaceUrl($url) { return str_replace($this->hwHost, $this->myHost, $url); } }Package Spring mvn : https://spring-file-storage.xuyanwu.cn/#/ https : //spring-file-storage.xuyanwu.cn/#/Apprentissage recommandé : "
tutoriel vidéo laravel
"Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!