分享OSS云环境文件上传与签名的重点代码

oss文件上传与签名

相信大家日常开发中,经常使用到云文件的上传与下载等功能,而国内常用的阿里云和华为云,laravel 自带的 Storage 默认并未进行友好支持。

刚好最近云迁移过程中的各种恶心,主要涉及上传与签名接口。特地记录下 OSS 云环境文件上传与签名的重点代码,以供参考。

相关包安装命令:

// 阿里云osscomposer require aliyuncs/oss-sdk-php// 华为云obscomposer require obs/esdk-obs-php

需注意包版本,是否与 php 版本适用。

.env 配置项:

# OSS相关配置OSS_DRIVER=HW_OBS#华为OBSOSS_HW_ENDPOINT=https://obs.cn-east-3.myhuaweicloud.comOSS_HW_KEY=ME0AVBTNJTSJB2LH0EGIOSS_HW_SECRET=eCGffrwdx3Rt5QEmKbtEvruvGgg1mCUjMsnHfjWoOSS_HW_BUCKET=pub-obs-test-1#阿里云OSS_ENDPOINT=https://oss-cn-hangzhou.aliyuncs.comOSS_KEYID=LTAI4Ftno9DsfiVHADX73osaOSS_KEYSECRET=vo9KuqgaDN727eOOz1tDg77Egeg7wEOSS_BUCKET=xgimi-ipr

代码:

1. 接口声明

<?phpnamespace AppServiceOSS;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. 阿里 OSS 实现

代码小浣熊 代码小浣熊

代码小浣熊是基于商汤大语言模型的软件智能研发助手,覆盖软件需求分析、架构设计、代码编写、软件测试等环节

代码小浣熊 51 查看详情 代码小浣熊

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. 华为 OBS 实现

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);    }}

Demo: 业务逻辑 + OSS 类

 false, 'message' => '请上传文件!'];        }        if (is_array($files)) {            $pics = [];            foreach ($files as $key => $file) {                if ($file->isValid()) {                    $name = $file->getClientOriginalName();                    $fullName = OSS::getFullFileName($name, $prefix);                    $ret = OSS::publicUpload($fullName, $file, $prefix);                    if ($ret) {                        $url = OSS::getUrl($fullName);                        $url = OSS::replaceUrl($url);                        $pics[] = ['name' => $name, 'url' => $url, 'file_name' => $fullName];                    }                } else {                    return ['ok' => false, 'message' => '无效文件!'];                }            }            if (count($pics) > 0) {                return ['ok' => true, 'data' => $pics];            }        } else {            $name = $files->getClientOriginalName();            $fullName = OSS::getFullFileName($name, $prefix);            $ret = OSS::publicUpload($fullName, $files, $prefix);            if ($ret) {                $url = OSS::getUrl($fullName);                $url = OSS::replaceUrl($url);                return ['ok' => true, 'data' => ['name' => $name, 'url' => $url, 'file_name' => $fullName]];            } else {                return ['ok' => false, 'message' => '无效文件!'];            }        }    }}
OSSService = new HuaweiOBS();        } else {            $this->OSSService = new AliOSS();        }    }    public static function getInstance()    {        return new self();    }    /**     * 使用外网上传文件     *     * @param $fullName     * @param $filePath     * @param $prefix     * @return mixed     * @throws Exception     */    public static function publicUpload($fullName, $filePath, $prefix)    {        return self::getInstance()->OSSService->publicUpload($fullName, $filePath);    }    /**     * 获取oss图片url     *     * @param $fullName     * @param $expires |    过期时效     * @return string     * @throws Exception     */    public static function getUrl($fullName, $expires = '')    {        return self::getInstance()->OSSService->getUrl($fullName, $expires);    }    /**     * 替换url域名     *     * @param $url     * @return mixed     */    public static function replaceUrl($url)    {        return self::getInstance()->OSSService->replaceUrl($url);    }    /**     * 获取完整的文件名含路径     *     * @param $fileName     * @param $prefix     * @return string     */    public static function getFullFileName($fileName, $prefix)    {        return self::OSS_PREFIX . $prefix . self::setFileName($fileName);    }    /**     * 设置新的文件名(重命名规则)     *     * @param $fileName     * @return string     */    public static function setFileName($fileName)    {        $nameArray = explode('.', $fileName);        $extension = $nameArray[count($nameArray) - 1];        $newName = date('Ymd') . '/' . date('YmdHis') . rand(10000, 99999) . '.' . $extension;        return $newName;    }}

有时间可以对其进行功能接口补充,丰富更多云接口能力。

附:

composer 包:https://packagist.org/packages/league/flysystem

composer require league/flysystem

Spring mvn 包:https://spring-file-storage.xuyanwu.cn/#/ | https://spring-file-storage.xuyanwu.cn/#/

推荐学习:《laravel视频教程》

以上就是分享OSS云环境文件上传与签名的重点代码的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/338755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 17:26:02
下一篇 2025年11月5日 17:27:18

相关推荐

  • 怎么把php源码部署到oss上_署php源码到oss步骤

    需将PHP源码部署至OSS以实现静态托管访问,首先创建Bucket并配置权限;随后启用静态网站托管功能,设置默认首页index.php;通过控制台上传全部源码文件,保持目录结构完整;为.php文件批量设置Content-Type为text/html,确保浏览器正确解析;最后绑定自定义域名并配置CNA…

    2025年12月13日
    000
  • 怎样使用ThinkPHP6实现OSS文件上传和下载操作?

    随着互联网技术的不断发展,云存储服务越来越受到人们的重视。阿里云对象存储(oss)是一个安全、稳定、高扩展性的云端存储服务,用于存储海量数据。本文将介绍如何使用thinkphp6框架实现阿里云oss文件上传和下载操作。 一、创建阿里云OSS Bucket 首先,需要在阿里云官网上创建一个用于存储文件…

    2025年11月5日
    000

发表回复

登录后才能评论
关注微信