Thinkcmf5 七牛云插件上传没有后缀不显示问题解决

最近发现用Thinkcmf开发的程序迁移服务器后,七牛云出了问题,cms后台上传的时候,看着七牛那边存储的文件不带后缀,切前台是带后缀的导致前台图片不显示问题。看了下七牛插件的源码,发现public/plugins/qiniu/Controller/AssetController里面的saveFile方法有些问题

        $signingStr    = "/move/{$encodedEntryURISrc}/{$encodedEntryURIDest}";
        $authorization = $auth->signRequest($signingStr, '');
        $url = 'http://rs.qiniu.com/' . $signingStr;
        $response = $client->post($url, null, ['Authorization' => 'QBox ' . $authorization]);

上面是改文件的一部分源码,执行上面程序七牛http返回码会直接301,原因是signingString多了第一个反斜线,去掉反斜线后,七牛返回的错误是bad_token,错误码是401,那就是token生成有误,token生成是

  $authorization = $auth->signRequest($signingStr, '');

具体代码逻辑可以自己点进去看下,我没有找到官网源码token生成的bug,所以这里我修复的方法是不走原来代码的逻辑,直接用bucketmanager替换原来的方式,整个saveFile方法如下:

 public function saveFile()
    {
        $userId = cmf_get_current_admin_id();
        $userId = $userId ? $userId : cmf_get_current_user_id();

        if (empty($userId)) {
            $this->error('error');
        }
        $validate = new Validate([
            'filename' => 'require',
            'file_key' => 'require',
        ]);

        $data = $this->request->param();

        $result = $validate->check($data);

        if ($result !== true) {
            $this->error($validate);
        }

        $fileKey = $data['file_key'];

        $suffix = cmf_get_file_extension($data['filename']);

        $config = $this->getPlugin()->getConfig();

        $accessKey = $config['accessKey'];
        $secretKey = $config['secretKey'];

        $auth = new Auth($accessKey, $secretKey);
        $qiniuconfig=new Config();
        $bk=new BucketManager($auth,$qiniuconfig);

        $err=   $bk->rename($config['bucket'],$fileKey,$fileKey.".{$suffix}");
        if($err){
            $this->error($err);
        }
        list($fileinfo,$error)=$bk->stat($config['bucket'],$fileKey.".{$suffix}");
        if($error){
            $this->error($error);
        }

        $findAsset = Db::name('asset')->where('file_key', $fileKey)->find();


        if (empty($findAsset)) {

            Db::name('asset')->insert([
                'user_id'     => $userId,
                'file_size'   => $fileinfo['fsize'],
                'filename'    => $data['filename'],
                'create_time' => time(),
                'file_key'    => $fileKey,
                'file_path'   => $fileKey . ".{$suffix}",
                'suffix'      => $suffix
            ]);
        }

        $this->success('success');

    }

亲测没有问题

Adam博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论