最近发现用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');
}亲测没有问题
本文为Adamin90原创文章,转载无需和我联系,但请注明来自http://www.lixiaopeng.top
执着丶小郭:大哥 我的错。 是可以的,必须赞一个
2020-04-27 15:51:27 回复
执着丶小郭:嗯 不行
2020-04-27 10:45:24 回复