yii2.0.50接入阿里云oss需完成四步闭环:1.在项目根目录执行composer require aliyuncs/oss-sdk-php并确保web/index.php引入vendor/autoload.php;2.在config/web.php components中注册oss组件,class指向aliyuncsossossclient且必须填真实accesskeyid、accesskeysecret、正确endpoint和bucket;3.控制器中通过yii::$app->oss获取实例,用@runtime等别名构造本地绝对路径;4.调用putobject上传(key不可以/开头),再拼接直链url访问。

在 Yii2.0.50 项目中接入阿里云 OSS 作为对象存储后端,需完成 SDK 安装、组件注册、配置注入与上传逻辑适配四步闭环,缺一不可,否则调用 $oss->upload() 时会抛出 Class 'AliyunOSSOssClient' not found 或 InvalidArgumentException(bucket 未指定)。
安装 OSS PHP SDK 并启用自动加载
进入项目根目录,执行:composer require aliyuncs/oss-sdk-php。这一步必须在 web/ 同级目录下运行,若误入 web/ 子目录会导致 vendor 路径错位,后续 Yii::$app->oss 将无法解析类。
确认 vendor/autoload.php 已被 web/index.php 正确引入——打开该文件,检查是否存在 require __DIR__ . '/../vendor/autoload.php'; 这一行;没有则手动补上,否则所有 OSS 类均不可用。
注册 oss 组件到应用主体
编辑 config/web.php(或 config/main.php,依实际结构而定),在 'components' => [ ... ] 数组内新增:
'oss' => [<br> 'class' => 'aliyuncs\oss\OssClient',<br> 'accessKeyId' => 'your-access-key-id',<br> 'accessKeySecret' => 'your-access-key-secret',<br> 'endpoint' => 'https://oss-cn-hangzhou.aliyuncs.com',<br> 'bucket' => 'your-bucket-name'<br>],
注意:此处不能直接 new OssClient 实例传入,必须用 class + 构造参数方式声明;【accessKeyId 和 accessKeySecret 必须填真实值,空字符串会导致初始化失败】;endpoint 若选错区域(如把 cn-shenzhen 写成 cn-hangzhou),上传时会返回 403 Forbidden。
编写上传逻辑并验证路径合法性
第一步:在控制器中获取组件实例:$oss = Yii::$app->oss;
第二步:构造本地文件绝对路径,例如:$localFile = Yii::getAlias('@runtime/uploads/test.jpg');。这里必须用 @runtime 或 @webroot 别名,硬写相对路径(如 './uploads/xxx')会导致跨环境失效。
第三步:执行上传:$oss->putObject($oss->bucket, 'uploads/test.jpg', $localFile);。注意第二个参数是 OSS 中的对象 key,它决定了文件在 bucket 内的存储位置和 URL 路径;如果 key 以 / 开头(如 '/uploads/xxx'),OSS 会拒绝并报 InvalidObjectName。
第四步:生成可访问 URL:$url = 'https://' . $oss->bucket . '.' . parse_url($oss->endpoint, PHP_URL_HOST) . '/uploads/test.jpg';。不要依赖 $oss->generatePresignedUrl() 生成临时链接——除非业务明确需要时效控制,否则直链更稳定。











