Yii2图片上传需严格配置fieldName、maxSize、allowFiles三项,pathFormat定义路径模板,uploadFilePath必须为绝对路径,uploadType支持upload/remote/base64三种模式,trueDelete设为字符串'true'并传入真实filePath方可触发unlink删除。

你需要在Yii2项目中精确控制图片上传行为,比如限制格式、大小、路径生成规则或是否真正删除服务器文件,而不是只移除HTML节点。
配置上传基础参数
在组件配置数组中设置fieldName、maxSize、allowFiles三项为必填项。其中fieldName必须与前端表单提交时的name属性完全一致,否则后端无法接收到文件数据。
maxSize单位是字节,设为2097152即2MB;若设为0或负数,将导致上传校验直接跳过,存在安全隐患。
allowFiles必须写成小写带点前缀的数组,例如[".jpg", ".png"]。写成["jpg","png"]或["JPG","PNG"]会导致所有图片被拒绝,且无明确错误提示。
控制上传路径与文件名生成
使用pathFormat定义保存路径模板,支持占位符:{yyyy}、{mm}、{dd}、{date}、{rand:6}。其中{rand:6}表示6位随机数字,不可省略冒号和数字,写成{rand6}会原样保留字符串不替换。
【uploadFilePath必须是绝对路径】,不能用@webroot或相对路径。常见错误是写成Yii::getAlias('@webroot') . '/uploads',这会导致mkdir失败且无报错——因为@webroot指向的是Web可访问目录,而上传逻辑需要写入PHP进程有权限的真实磁盘路径。
建议统一用dirname(dirname(__DIR__)) . '/uploads'并配合Yii::setAlias('uploads', ...)在bootstrap.php中声明别名,后续所有路径引用都基于该别名。
区分上传类型与服务端地址
方法一:设置uploadType为'upload'启用本地上传,此时serverUrl应指向一个继承自UploadAction的控制器动作,如Url::to('/admin/upload/upload_more')。
方法二:设uploadType为'remote'时,serverUrl需填写第三方图床完整URL(含协议),且后端不再处理文件保存逻辑,仅做代理转发。
方法三:设uploadType为'base64'时,前端必须以base64字符串提交,serverUrl仍需指向一个能解析base64并解码保存的Action,且该Action要自行处理$_POST['fileData']而非$_FILES。
启用真实文件删除机制
第一步:确保配置项trueDelete值为字符串'true'(注意是字符串不是布尔值),写成true或1会导致判断失效。
第二步:在前端删除按钮触发的JS回调中,必须向后端发送包含filePath字段的POST请求,该字段值应为服务器上真实的物理路径(非URL或数据库存的相对路径)。
第三步:后端UploadAction内部会调用unlink()删除文件,但前提是filePath可被PHP进程读写。若路径拼接错误或权限不足,unlink静默失败,不会抛出异常。
这一步操作起来很简单,直接把filePath传给unlink()就行,但必须确认路径已通过realpath()标准化且不在open_basedir限制范围内。


















