如何使用 postdata preSigned Url 调用 Amazon S3 存储桶以使用空手道上传文件
How to call Amazon S3 bucket using postdata preSigned Url to upload a file using Karate
我有一个 Amazon S3 的预签名后数据 URL。我想在空手道功能文件中使用它来上传文件(例如:pdf)
这是我需要使用空手道执行的示例 Curl 请求 POST 请求
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 存储桶
试试这个改变:
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
我有一个 Amazon S3 的预签名后数据 URL。我想在空手道功能文件中使用它来上传文件(例如:pdf)
这是我需要使用空手道执行的示例 Curl 请求 POST 请求
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 存储桶
试试这个改变:
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