You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP(Yii2框架)实现本地图片直接上传至Cloudinary服务器

错误原因

你直接将Yii2的UploadedFile实例传入Cloudinary的上传方法,API会将对象转义为文件名当成URL解析,因此抛出Unsupported source URL报错。

解决方案

你不需要手动将文件持久化到自有服务器再删除,PHP处理表单上传时会自动生成临时文件,存储在系统临时目录中,请求结束后会自动销毁,直接调用临时文件路径上传即可,全程不会在你的服务器产生持久化文件,完全符合需求。

修改后的控制器代码如下:

public function actionCreate()
{
    $model = new Galerias();

    // 初始化cloudinary
    $config = Configuration::instance();
    $config->cloud->cloudName = 'cloudName';
    $config->cloud->apiKey = 'yayaiknow';
    $config->cloud->apiSecret = 'gogogodude';
    $config->url->secure = true;

    // 正在执行上传
    if ($model->load(Yii::$app->request->post())) {
        if($model->validate()) {
            $image = UploadedFile::getInstance($model, 'image');
            // 传入临时文件路径上传,接收返回结果
            $uploadResult = (new UploadApi())->upload($image->tempName);
            // 取Cloudinary返回的HTTPS图片地址存入模型
            $model->image = $uploadResult['secure_url'];
            $model->created_at = date('Y-m-d h:i:s');
            $model->updated_at = null;
            if($model->save()){
                return $this->redirect(['view', 'id' => $model->id]);
            }
        }
    }

    return $this->render('create', [
        'model' => $model,
    ]);
}

补充说明

  • 现有表单代码无需做任何修改,保持enctype = multipart/form-data配置即可正常使用
  • 临时文件由PHP自动管理,无需手动创建或删除,无多余操作步骤
  • 若需要自定义图片文件名、分类目录等参数,可在upload方法第二个参数传入配置数组即可

内容的提问来源于stack exchange,提问作者Coyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 05:15:08