七牛上传文件的API有没有curl使用范例呢?

Feng_Yu
  • 9.4k

按照七牛的官方文档,我写的shell脚本如下:

bashscope="$namespace:uploadfile.7z"
deadline=$(echo `date +%s` + 3600| bc )

# step2: 将上传策略序列化成为JSON格式
putPolicy="{\"scope\":\"$scope\",\"deadline\":$deadline}"
echo "$putPolicy"

# step3: 对JSON编码的上传策略进行URL安全的Base64编码,得到待签名字符串
encodedPutPolicy=`echo -n "$putPolicy" | base64 -w0 | sed 's/\+/-/g; s/\//_/g'`
echo "$encodedPutPolicy"

# step4: 使用SecertKey对上一步生成的待签名字符串计算HMAC-SHA1签名
# 参考stackoverflow的相关帖子,使用openssl生成HMAC-SHA1签名字符串
# http://stackoverflow.com/questions/7285059/hmac-sha1-in-bash
sign=`echo -n "$encodedPutPolicy" | openssl sha1 -hmac "$secretkey" | awk '{print $2}'`
echo $sign

# step5: 对签名进行URL安全的Base64编码
encodedSign=`echo -n "$sign" | base64`
echo $encodedSign

# step6: 将AccessKey、encodedSign和encodedPutPolicy用:连接起来
uploadToken="$accesskey:$encodedSign:$encodedPutPolicy"
echo $uploadToken

curl -v -F token="$uploadToken" -F file='$(fname)' -F fileBinaryData=@uploadfile.7z http://upload.qiniu.com/

最后curl执行的时候,检测报文都是没有问题的,但是报错{"error":"bad token"},和官方提供的上传凭证生成器对比了一下,发现似乎在HMAC-SHA1这一步的时候结果不同,使用官方提供的生成器,最后第5步生成的base64编码反解是二进制字符串,不是ASCII.

我想问一下如果用bash脚本最后调用curl完成上传文件的操作,有没有提供相关的范例呢?或者请指出我的脚本中哪一步不对,导致生成的token不对呢?

回复
阅读 4.3k
1 个回答
✓ 已被采纳

问题解决了,是因为sign这一步没有转成十六进制。仔细读了一遍官方文档。改写为如下

sign=`echo -n "$encodedPutPolicy" | openssl sha1 -hmac "$secretkey" | awk '{print $2}' | xxd -r -p`

问题解决

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进