Karate 如何在空手道中使用multipart上传多个文件

Karate 如何在空手道中使用multipart上传多个文件,karate,Karate,我想在一个请求中使用multipart上传多个图像文件。我已经回顾了有关这方面的空手道示例,但是多文件上传不符合我的需要(/multiple endpoint here-)。我的服务方法(springrest)签名需要一个MultipartFile[]数组,这样我就可以接受任意数量的文件。以下是我的设想: Scenario: Upload multiple files * def json = {} * set json.files[0] = { read: 'file1.jpg

我想在一个请求中使用multipart上传多个图像文件。我已经回顾了有关这方面的空手道示例,但是多文件上传不符合我的需要(/multiple endpoint here-)。我的服务方法(springrest)签名需要一个MultipartFile[]数组,这样我就可以接受任意数量的文件。以下是我的设想:

Scenario: Upload multiple files
    * def json = {}
    * set json.files[0] = { read: 'file1.jpg', filename: 'file1.jpg', contentType: 'image/jpeg' }
    * set json.files[1] = { read: 'file2.jpg', filename: 'file2.jpg', contentType: 'image/jpeg' }
    Given path '/rest' 
    And multipart files json
    When method post
    Then status 200
这里是SpringWeb服务方法(现在只是尝试接收文件,所以该方法没有太多作用):

运行此命令时,我收到一个空手道错误:“多部分文件值应为json”

如果我更改场景以执行此操作:

    Scenario: Upload multiple files
        * def json = {}
        * set json.files = { read: 'file1.jpg', filename: 'file1.jpg', contentType: 'image/jpeg' }, { read: 'file2.jpg', filename: 'file2.jpg', contentType: 'image/jpeg' }
        Given path '/rest' 
        And multipart files json
        When method post
        Then status 200
然后测试执行ok,但只有一个文件在MultipartFile数组“files”(服务方法参数)中结束

使用空手道将多个文件上传到上述web服务方法的正确方式是什么

编辑:添加客户端代码(如下)并更新上面的Spring方法

下面是一个简单的HTML表单,它将向上面的Spring方法提交多个文件:

<form method="POST" enctype="multipart/form-data" action="/rest">
    <table>
        <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>
        <tr><td>File to upload:</td><td><input type="file" name="file" /></td></tr>
        <tr><td></td><td><input type="submit" value="Upload" /></td></tr>
    </table>
</form>

要上载的文件:
要上载的文件:

提交时,我在服务方法中获得了2个文件。

哇,以前从未见过这种情况,很可能空手道不支持它。我还想知道,根据HTTP规范,这是否合法?据我所知,每个文件都必须有唯一的字段名。您是否有ApacheHTTP客户端的相应客户端代码,这会有所帮助

编辑:另请参见下面的答案:


您的最佳选择可能是提交功能请求,并提供代码以加快速度。请注意,这是两年来第一次有人报告这是一个问题。

似乎它确实有效,您只需要在功能文件中发送两次相同的参数

和多部分文件文件={read:'mergeTest.pdf',filename:'upload name.pdf',contentType:'application/pdf'}

和多部分文件文件={read:'mergeTest.pdf',filename:'upload name.pdf',contentType:'application/pdf'}

和多部分字段文件元数据=

我的服务:

public ResponseEntity<StreamingResponseBody> mergePdfs(@RequestPart @Validated
            List<FileMetaData> filesMetadata, @RequestPart @Validated List<MultipartFile> files)
public ResponseEntity合并PDF(@RequestPart@Validated
列表文件元数据,@RequestPart@Validated列表文件)

Peter,我添加了用于测试Spring REST服务的HTML表单。我正在更改我的服务,使其以不同的方式工作。。。基本上可以接受多部分文件的列表,这样每个文件的字段名都可以是唯一的,正如您所提到的。谢谢。你试过在这个文档中像这样传递它吗->
*set json.file1={read:'file1.jpg',filename:'file1.jpg',contentType:'image/jpeg'}

*set json.file2={read:'file2.jpg',contentType:'image/jpeg'}
Hi。是的,我见过这个例子。我正在更改我的服务以接受一个DTO对象,该对象具有多部分文件的堆栈列表!我已经编辑了我的答案,指向你的答案,很高兴听到这是可行的。
public ResponseEntity<StreamingResponseBody> mergePdfs(@RequestPart @Validated
            List<FileMetaData> filesMetadata, @RequestPart @Validated List<MultipartFile> files)