微信小程序+Yii实现文件上传

文章目录
[隐藏]

1.新建文件Model( UploadForm )

class UploadForm extends Model
{
    /**
     * @var UploadedFile
     */
    public $imageFile;

    public function rules()
    {
        return [
            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, jpeg, gif'],
        ];
    }


    public function upload()
    {
        if ($this->validate()) {
            $new_name = 'uploads/' . $this->imageFile->baseName . '-' . time() . '.' . $this->imageFile->extension;
            $this->imageFile->saveAs($new_name);
            return $new_name;
        } else {
            return false;
        }
    }
}
项目web目录下创建uploads文件夹,并给读写操作权限

2.获取上传文件

public function uploadImage()
    {
        $data = \Yii::$app->request->post(); //获取formData参数
        $model = new UploadForm();
        $model->imageFile = UploadedFile::getInstanceByName('imageFile');
        $fileName = $model->upload();
        if (!empty($fileName)) {
            //上传成功,fileName为图片路径
        }else {
            //上传失败
        }
    }

3.小程序上传文件

UploadTask wx.uploadFile(Object object)
将本地资源上传到服务器。客户端发起一个 HTTPS POST 请求,其中 content-type 为 multipart/form-data
参数
Object object

属性 类型 默认值 必填 说明
url string   开发者服务器地址
filePath string   要上传文件资源的路径
name string   文件对应的 key,开发者在服务端可以通过这个 key 获取文件的二进制内容
header Object   HTTP 请求 Header,Header 中不能设置 Referer
formData Object   HTTP 请求中其他额外的 form data
success function   接口调用成功的回调函数
fail function   接口调用失败的回调函数
complete function   接口调用结束的回调函数(调用成功、失败都会执行)

object.success 回调函数
参数
Object res

属性 类型 说明
data string 开发者服务器返回的数据
statusCode number 开发者服务器返回的 HTTP 状态
示例代码
wx.chooseImage({
  success (res) {
    const tempFilePaths = res.tempFilePaths
    wx.uploadFile({
      url: 'https://example.com/upload', //接口地址
      filePath: tempFilePaths[0],
      name: 'imageFile',//对应UploadedFile::getInstanceByName('imageFile')
      formData: { //Yii:$app->request->post()获取参数
        'user': 'test'
      },
      success (res){
        const data = res.data
        //do something
      }
    })
  }
})

4.遇到问题

4.1.move_uploaded_file(uploads/xxx.jpg): failed to open stream: Permission denied
uploads文件夹权限不够,chmod 777 /uploads
4.2.The file “xxxx.jpg” is too big. Its size cannot exceed 2.00 MiB.
PHP 默认上传文件大小为2M,需要修改php.ini配置
Linux:修改php.ini
1. 查看php.ini路径
[root@localhost php-fpm.d]# php -i |grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
2. 修改php.ini
vim /etc/php.ini
upload_max_filesize = 2M //按照自己需求修改最大上传文件大小
3. 重新加载php配置
systemctl reload php-fpm
总结:
1. 小程序UploadFile方法name和UploadedFile::getInstanceByName('imageFile')对应
2. 需要创建好uploads文件夹并分配权限
3. PHP默认最大上传文件为2M,按照需求修改
4. 小程序UploadFile无法上传多张图片,需要多次调用
324 人浏览过

发表评论

邮箱地址不会被公开。 必填项已用*标注