Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Rest Assured multipart将文件上载到S3_Multipart_Rest Assured - Fatal编程技术网

使用Rest Assured multipart将文件上载到S3

使用Rest Assured multipart将文件上载到S3,multipart,rest-assured,Multipart,Rest Assured,我正试图向S3发出PUT请求,以便上传一个文件。下面是到目前为止我掌握的最可靠的代码 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";

我正试图向S3发出PUT请求,以便上传一个文件。下面是到目前为止我掌握的最可靠的代码

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(错误请求)。我不确定是否正确使用了多部分上传

但当我使用任何rest客户机(如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
PUT
  • EDIT1:

    我尝试将上面的邮递员请求转换为curl,并尝试使用curl,甚至效果也不错

    因此,我在rest-assured中使用multipart的方式有些错误

    EDIT2:

    事实证明,我正确地使用了rest-assured,我从S3得到了403个签名不匹配错误。虽然它在日志中显示的签名与AWS预期的相同。
    经过进一步研究,我了解到即使缺少任何标头参数,也会发送“签名不匹配”错误。

    有迹象表明,REST assured不支持正确的
    多部分/mixed
    ,例如此问题:-我知道我的组织中有一个团队在过去遇到过相同的问题


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

    有迹象表明,REST assured不支持
    multipart/mixed
    ,例如此问题:-我知道我的组织中有一个团队过去遇到过相同的问题


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

    最终我找到了解决方案

    首先,URL已经编码。所以我必须指示RA不要再对它进行编码

    given().urlEncodingEnabled(false). ...
    
    其次,AWS希望字符集为空。您可以使用下面的代码行指示RA执行此操作

    given().
     config(RestAssured.config().encoderConfig(EncoderConfig.encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false))).
    
    参考链接:

    关于这个特殊的问题


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

    最终我找到了解决方案

    首先,URL已经编码。所以我必须指示RA不要再对它进行编码

    given().urlEncodingEnabled(false). ...
    
    其次,AWS希望字符集为空。您可以使用下面的代码行指示RA执行此操作

    given().
     config(RestAssured.config().encoderConfig(EncoderConfig.encoderConfig().appendDefaultContentCharsetToContentTypeIfUndefined(false))).
    
    参考链接:

    关于这个特殊的问题


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

    你能帮我看看我的问题吗