我想使用分段方式在一个请求中上传多个图像文件。我已经查看了空手道示例,但是上传多个文件不符合我的需要(/此处为多个端点-https://github.com/intuit/karate/blob/master/karate-demo/src/main/java/com/intuit/karate/demo/controller/UploadController.java)。我的服务方法(Spring REST)签名需要一个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
这是Spring Web服务方法(只是尝试立即接收文件,因此该方法没有太大作用):
@PostMapping("/rest")
public String handleFileUpload(@RequestParam("file") MultipartFile[] file) {
System.out.println("Len: " + file.length);
for(MultipartFile currentFile : file) {
System.out.println("In here: " + currentFile.getOriginalFilename());
}
return file[0].getOriginalFilename();
}
运行此命令时,我收到一个空手道错误:“多部分文件值应为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
然后测试执行正常,但是MultipartFile数组“文件”(服务方法参数)中只有一个文件。
使用空手道将多个文件上传到上述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个文件。
答案 0 :(得分:1)
似乎可以正常工作,您只需要在功能文件中两次发送相同的参数
和多部分文件= =读取:“ mergeTest.pdf”,文件名:“ upload-name.pdf”,contentType:“ application / pdf”}
和多部分文件= =读取:“ mergeTest.pdf”,文件名:“ upload-name.pdf”,contentType:“ application / pdf”}
和多部分字段文件元数据= ....................................... ..
我的服务:
public ResponseEntity<StreamingResponseBody> mergePdfs(@RequestPart @Validated
List<FileMetaData> filesMetadata, @RequestPart @Validated List<MultipartFile> files)
答案 1 :(得分:0)
哇,以前从未见过,空手道很可能不支持它。我还想知道,根据HTTP规范,这是否合法-就我所知-每个文件必须具有唯一的字段名称。您是否有Apache HTTP客户端的相应客户端代码,这将有所帮助。
您最好的选择是提交功能请求,并提供代码以加快速度。请注意,这是两年来第一次有人将此问题报告为问题。