overtrue/flysystem-qiniu

key带有特殊符号的情况换生成的getUrl生成的链接编码错误

mogody opened this issue · 6 comments

return $this->normalizeHost($this->domain).ltrim(implode('/', array_map('urlencode', explode('/', $segments['path']))), '/').$query;

上面生成url的代码, 最后还会做一次 urlencode, 但是在有特殊符号的情况下, urlencode编码后会无法访问, 例子如下:

正常的url路径:(带有空格和括号)

http://file1.oldlooker.com/qiniudisk/4_61PcDOhLm5Tc8kNhFlpwxbOMgmAsk4c6 (1).jpg

其中 key 为:

qiniudisk/4_61PcDOhLm5Tc8kNhFlpwxbOMgmAsk4c6 (1).jpg

那么通过 getUrl 生成的url是:

http://file1.oldlooker.com/qiniudisk/4_61PcDOhLm5Tc8kNhFlpwxbOMgmAsk4c6+%281%29.jpg

其中的括号被编码成了 %28 和 %29, 实际这样的url, 是无法访问的, 七牛直接报错:

{"error":"get from image source failed: E401"}

同问,这样带图片样式中的特殊字符也会被编码,这是个很常见的需求,望作者修复

QiniuAdapter::parse_url
$replacements = array('!', '*', "'", '(', ')', ';', ':', '@', '&', '=', '$', ',', '/', '?', '#', '[', ']');

刚刚到这段代码,作者可以加上~吗,我当作图片样式时通不过

@symfonyluxury 换一个库, flysystem上面官方有推荐两个库, 都可以用, 这个库应该是放弃维护了

QiniuAdapter::parse_url
$replacements = array('!', '*', "'", '(', ')', ';', ':', '@', '&', '=', '$', ',', '/', '?', '#', '[', ']');

刚刚到这段代码,作者可以加上~吗,我当作图片样式时通不过

麻烦提供一个实例 key 看看?

key:
photo/j0zYA8x1.jpg~large_testV1
是在生成私有链接时调用 privateDownloadUrl,访问生成链接显示 “download token auth failed”
不过目前我把样式符号换成 @ 就没事了

@symfonyluxury @wh469012917 已修复