如何使用预先签名的令牌使用curl上传amazon s3?

时间:2016-05-13 14:40:49

标签: curl amazon-s3 amazon

我正在开发一个用于移动平台上传文档的API。 该过程包括3个步骤:

  1. 调用API以接收预签名令牌集。
  2. 使用该令牌集上传到s3。
  3. 使用步骤2中返回的密钥使用API​​创建文档实体。
  4. 我在第2步遇到问题。 下面是curl命令:

    curl -F "key=<key>/${filename}" 
    -F "AWSAccessKeyId=<...>" 
    -F "success_action_status=201" 
    -F "Policy=<...>" 
    -F "Signature=<...>" 
    -F "file=@/Users/boti/Desktop/BotondsPhoto.png" https://<bucket>.s3.amazonaws.com
    

    curl命令上传文件并返回xml,如:

    <?xml version="1.0" encoding="UTF-8"?>
    <PostResponse>
      <Location>https://<...>.s3.amazonaws.com/3%2Fe055ff06-9938-4f5c-b5c4-7b6a6df34a6f%2F</Location>
      <Bucket>...</Bucket>
      <Key>3/e055ff06-9938-4f5c-b5c4-7b6a6df34a6f/</Key>
      <ETag>"cccc1defcab53079456f245b8a1e1d2d"</ETag>
    </PostResponse>
    

    问题在于返回的密钥。斜杠后面的最后一部分$ {filename}应该已经被文件名替换。它应该是这样的:

    <Key><key>/Toptal Photo.png</Key>
    

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我发现curl命令中的$符号需要转义:

curl -F "key=<key>/\${filename}" \
-F "AWSAccessKeyId=<...>" \
-F "success_action_status=201" \
-F "Policy=<...>" \
-F "Signature=<...>" \
-F "file=@/Users/boti/Desktop/BotondsPhoto.png" https://<bucket>.s3.amazonaws.com