【问题标题】:Uploading file to S3 using Rest Assured multipart使用 Rest Assured multipart 将文件上传到 S3
【发布时间】:2017-12-22 10:33:02
【问题描述】:

我正在尝试向 S3 发出 PUT 请求以上传文件。在我目前拥有的 Rest Assured 代码下方,

String putURL = "A lengthy URL that is generated dynmaically";
String fileId = "A random 40 digit key generated by our server";
String cKey = "some key given by amazon";
String cMD5 = "some md5 hash value";

Response r = given().contentType("multipart/mixed").
                headers("x-amz-header1",cKey,
                        "x-amz-header2",cMD5,
                        "x-amz-header7",accountId,
                        "x-amz-header6",fileId,
                        "x-amz-header5","abc",
                        "x-amz-header4","image/jpeg",
                        "x-amz-header3","true",
                        "Content-Type","application/octet-stream").
                multiPart(new File("src/test/resources/media/ToBeRemoved.jpg")).
                put(putURL);
System.out.println("*********Response code: "+r.getStatusCode());

我总是从服务器收到 400(错误请求)。我不确定我是否正确使用分段上传。

但是当我使用 POSTMAN 等任何其他客户端执行相同操作时,它工作正常,

PUT <A lengthy URL that is generated dynmaically>
Host: abcd.s3-accelerate.amazonaws.com
x-amz-header1: cKey
x-amz-header2:cMD5
x-amz-header7:accountId
x-amz-header6:fileId
x-amz-header5:abc
x-amz-header4:image/jpeg
x-amz-header3:true
Content-Type:application/octet-stream"
Cache-Control: no-cache
Postman-Token: 687761ef-e059-4a07-eee4-9755931d060a

如果有人可以放心地对分段上传有所了解,那将很有帮助。

我已经检查了以下链接,

EDIT1:

我尝试将上述 POSTMAN 请求转换为 curl 并尝试使用 CURL,甚至效果很好。

所以我放心使用 multipart 的方式有问题。

EDIT2:

事实证明我使用的放心,我从 S3 收到 403 Signature mismatch 错误。尽管它在日志中显示的签名与 AWS 的预期相同。 经过一番研究,我了解到即使缺少任何标头参数也会发送“签名不匹配”错误。

【问题讨论】:

    标签: multipart rest-assured


    【解决方案1】:

    我终于找到了解决办法。

    首先,URL 已经编码。所以我只好指示RA不要再编码了,

    given().urlEncodingEnabled(false). ...
    

    其次,AWS 期望字符集为空。您可以使用以下代码行指示 RA 执行此操作,

    given().
     config(RestAssured.config().encoderConfig(EncoderConfig.encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false))).
    

    参考链接:

    GitHub issue link 谈论这个特定问题。

    特别感谢我的朋友 Saurabh,他帮助我分析问题并指导正确的方向以帮助在线找到解决方案。

    【讨论】:

    【解决方案2】:

    有迹象表明 REST-assured 不正确支持 multipart/mixed,例如这个问题:https://github.com/rest-assured/rest-assured/issues/374 - 我知道我组织中的一个团队过去遇到过同样的问题。

    如果您愿意评估基于 JVM 的替代工具,我可以推荐 Karate(免责声明:我是开发人员) - 因为它全面支持文件上传,包括 multipart/mixed

    【讨论】:

      猜你喜欢
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 2023-03-20
      • 2020-01-15
      • 2014-04-19
      相关资源
      最近更新 更多