【问题标题】:How to call Amazon S3 bucket using postdata preSigned Url to upload a file using Karate如何使用 postdata preSigned Url 调用 Amazon S3 存储桶以使用空手道上传文件
【发布时间】:2020-09-16 23:01:46
【问题描述】:

我有一个 Amazon S3 的 postdata 预签名 URL。我想在空手道功能文件中使用它来上传文件(比如:pdf)

这是我需要使用空手道 POST 请求执行的示例 Curl 请求

curl --location --request POST '<s3bucketURL>' \
--form 'key=some_key_fileName' \
--form 'x-amz-meta-payload={JsonObject}' \
--form 'Content-Type=application/pdf' \
--form 'bucket=<BucketName>' \
--form 'X-Amz-Algorithm=AWS4-HMAC-SHA256' \
--form 'X-Amz-Credential=<AWS_Credential>' \
--form 'X-Amz-Date=<Date>' \
--form 'Policy=<Policy_Hash>' \
--form 'X-Amz-Signature=<Signature_Hash>' \
--form 'file=@/Users/sahildua/validfile.pdf'  

我收到来自服务器的响应(具有 preSignedUrl)并在功能文件中使用以下代码

  "url": "<s3bucketURL>",
  "fields": {
    "key": "some_key_fileName",
    "x-amz-meta-payload": "{JsonObject}",
    "Content-Type": "application/pdf",
    "bucket": "<BucketName>",
    "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
    "X-Amz-Credential": "<AWS_Credential>",
    "X-Amz-Date": "<Date>",
    "Policy": "<Policy_Hash>",
    "X-Amz-Signature": "<Signature_Hash>"

我试过了

Given url response.url
* def fieldData = response.fields
* print fieldData
* form fields fieldData
And multipart file file = { read: '../testData/validPdfFile.pdf'}
When method post
Then match responseStatus ==  204

但我收到来自 Amazon S3 的验证 XML 错误,提示字段值不正确

<Error> 
<Code>InvalidArgument</Code> 
<Message>Bucket POST must contain a field named 'key'. If it is specified, please check the order of the fields.</Message>
<ArgumentName>key</ArgumentName>
<ArgumentValue></ArgumentValue> 
<RequestId><id></RequestId> 
<HostId><someid></HostId> 
</Error>

我希望 204 No Content 和文件要上传到 S3 存储桶

【问题讨论】:

    标签: amazon-s3 file-upload karate form-data feature-file


    【解决方案1】:

    试试这个改变:

    And multipart file file = { read: '../testData/validPdfFile.pdf'}
    

    阅读本文以获得更多解释:https://github.com/intuit/karate/tree/develop#multipart-file

    除此之外,您似乎做的一切都是正确的。因此,现在取决于您的调试技能。或者给我们一个复制的方法:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

    【讨论】:

    • 谢谢@peter-thomas 以上建议对我有用。但是,现在我被 fieldData 卡住了如果你看到我在响应中得到的“字段”中的顺序,S3 在调用 POST req 时需要以相同顺序的键值我看到这个错误直接提供它而不做任何修改: 'InvalidArgument Bucket POST 必须包含一个名为“key”的字段。如果指定,请检查字段顺序。key HostId> '
    • 嗨@peterthomas - 我用你的建议更新了我的代码。现在停留在解析对 S3 preSigned Url 提出请求的字段值
    • @SahilDua 抱歉无法理解。如果需要,请提出新问题
    • 没问题@peterthomas - 我提出了一个新问题,感谢您的帮助[链接]stackoverflow.com/questions/62087433/…
    猜你喜欢
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2014-11-11
    • 2016-03-31
    • 2018-04-12
    • 2023-02-04
    • 1970-01-01
    相关资源
    最近更新 更多