问题描述
官方文档
对象存储 > 产品手册 > 安全机制 > 下载凭证:https://developer.qiniu.com/kodo/manual/1202/download-token
解决方案
1、SECRET_KEY不正确。
SecretKey可在下面这地方获取:
2、 DownloadUrl不完整
DownloadUrl需要包括协议://自定义域名[或者测试域名]/文件名
DownloadUrl = 'http://78re52.com1.z0.glb.clouddn.com/resource/flower.jpg'
例:
/** * 获取私有空间文件 * @param fileKey * @return */ public String getPrivateFile(String fileKey) throws Exception{ String encodedFileName = URLEncoder.encode(fileKey, "utf-8").replace("+", "%20"); String publicUrl = String.format("%s/%s", "http://" + domain, encodedFileName) ; long expireInSeconds = 3600;//1小时,可以自定义链接过期时间 String finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds); return finalUrl; }
3、官方文档中的注意事项
注意:
为确保客户端、业务服务器和七牛服务器对于授权截止时间的理解保持一致,需要同步校准各自的时钟。频繁返回 401 状态码时请先检查时钟同步性与生成 e 参数值的代码逻辑。
token 必须放在请求的最后,token 之后的参数会被忽略。以请求
http://test.cinem.net/aaaa.jpg?e=1778754963&token=sQvk4AXf0rEkzcytkr...XjI0M:zwvwiM0wsMBRj46xcby05U=&attname=geral_TS-PFS3010-8ET
为例,此时attname=geral_TS-PFS3010-8ET
会被忽略,并不生效。对于包含中文或其它非英文字符的 Key,需要做到以下两点:
Key 本身要做 UTF-8 编码
为 URL 签名之前,对 Path 部分(不含前导 / 符号,通常就是 Key 本身,即上例中的 resource/flower.jpg)做一次URL 安全的 Base64 编码。