按照这篇文档(help.aliyun.com/knowledge_detail/5973732.html) ,可以使用OSS SDK生成一个URL提供第三方来上传文件,但是使用curl命令测试总是提示签名不正确。
URL生成代码:
Date expires =
new Date(
new Date().getTime() +
15000 *
60)
;
// 1 minute to expire
GeneratePresignedUrlRequest request =
new GeneratePresignedUrlRequest(
"rise-academy-hippoom"
,
"spike1.jpg"
, HttpMethod.
PUT)
;
request.setExpiration(expires)
;
request.setContentType(
"image/jpeg")
;
URL url =
client.generatePresignedUrl(request)
;
System.
out.println(url.toString())
;
curl命令:
curl -XPUT rise-academy-hippoom.oss-cn-shanghai.aliyuncs.com/spike1.jpg\?Expires\=1468211581\&OSSAccessKeyId\=rE9VKnhNps3jjABi\&Signature\=P5OvnQUTdcuMvVzy1RZJNGfRS3Y%3D --data-binary <path-to-file>
总是提示
<Error>
<Code>
SignatureDoesNotMatch
</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
<RequestId>
57831F25E0325C10097A2E46
</RequestId>
<HostId>
rise-academy-hippoom.oss-cn-shanghai.aliyuncs.com
</HostId>
<OSSAccessKeyId>
rE9VKnhNps3jjABi
</OSSAccessKeyId>
<SignatureProvided>
P5OvnQUTdcuMvVzy1RZJNGfRS3Y%3D
</SignatureProvided>
<StringToSign>
PUT
image/jpeg
1468211581
/rise-academy-hippoom/spike1.jpg
</StringToSign>
<StringToSignBytes>
50 55 54 0A 0A 69 6D 61 67 65 2F 6A 70 65 67 0A 31 34 36 38 32 31 31 35 38 31 0A 2F 72 69 73 65 2D 61 63 61 64 65 6D 79 2D 68 69 70 70 6F 6F 6D 2F 73 70 69 6B 65 31 2E 6A 70 67
</StringToSignBytes>
</Error>
我使用同样地方法生成授权访问的URL(get方法)是可以工作的,就是PUT不行。
我使用OSSClient.putObject 则可以上传,有人遇到过类似的问题吗?
如果生成签名URL的时候指定了Content-Type,则上传时要给定Content-Type和Content-Length,如果没有给的Content-Type,则只有给Content-Length,就你这个问题来说,需要再给一个Content-Type=image/jpeg和Content-Length请求头。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。