开发者社区> 问答> 正文

后端 Nodejs 签名传客户端客户端上传文件

现在由于我们后端的配置非常不行, 宽带速度也不行, 不能做到让客户端传到后端再从后端传 OSS, 所以就想了个签名直传的方法.
看了基本上所有的官方文档都没能 resolve 这个问题我才来提问一下.

在 body 里面我用的是 key : file, value: 文件(现在做测试是一张200kb 左右, 名为 desktop.jpg 的照片)

如果我用的是 Header 里加 Authorization, value 是"OSS "+AccessKeyId + ":" + Signature , response 就会报错说 "OSS authentication requires a valid Date".
具体 generate signature 的代码是网上下载的一个叫 signature-demo 的里面给的. 我感觉问题可能出在 [font="]CanonicalizedResource 里面


之所以用到这个 demo 里面的代码是因为如果我用 OSS的
client.signatureUrl("/bucket/test/", {method : "PUT" }), 就会报SignatureDoesNotMatch.
如果是用
client.signatureUrl("bucket/test/filename", {method : "PUT"}), 也还是会报 SignatureDoesNotMatch.
源码里面 signatureUrl() 的第一个参数是 name, 具体是什么的 name 我一直不知道.
最后说一下我的环境, 请求都是用 PostMan 做的,全是 PUT 请求, OSS bucket 管理里面的跨域设置也都做好了, 最惨的是如果我用 client.signature("/bucket/test/filename", {method : "GET"}) 那我的这个 signature 就是 valide 的, 我就可以拿到文件.
搞到这里我都不知道如何做这个 signature 了.


具体的问题就是, 如何正确的写这个 signature 使得客户端可以直传文件上 OSS.

展开
收起
bzftw 2017-07-11 13:41:30 3860 0
2 条回答
写回答
取消 提交回答
  • 回 1楼魔咒626的帖子
    为什么文档不一致?
    这里的URL 怎么要SignatureMethod, SignatureNonce 这些了?
    而在:
    h ttps://help.aliyun.com/document_detail/31952.html?spm=5176.doc31852.2.1.FYRvtj
    里怎么整个 URL 的结构就不一样了?
    2017-07-12 12:08:11
    赞同 展开评论 打赏
  • 签名简单的理解是对公共头进行大小写排序,然后做hmac计算,最后base64编码。详细文档:
    https://help.aliyun.com/document_detail/54229.html?spm=5176.doc31827.6.1080.keoHV4&parentId=31815
    也可以参考相关语言的例子。
    2017-07-12 06:04:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
探究 Node.js 的服务端之路 立即下载
个推微服务实践 基于OpenResty 和Node.js 立即下载
沪江基于Node.js大规模应用实践 立即下载