繁体   English   中英

Spring MVC测试多文件上传

[英]Spring MVC test Mulitple file upload

我有控制器,可以处理多个文件上传:

 @PostMapping("/import")
 public void import(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
    assertUploadFilesNotEmpty(files);
    ...
}

我想测试一下

    @Test
public void importTest() throws Exception {
    MockMultipartFile file = new MockMultipartFile("file", "list.xlsx", MIME_TYPE_EXCEL, Files.readAllBytes(Paths.get(excelFile.getURI())));
    mvc.perform(fileUpload("/import").file(file).contentType(MIME_TYPE_EXCEL)).andExpect(status().isOk());
}

问题是MockMvc使用multipartFiles创建MockHttpRequest作为保存上载文件的param的名称。 我的控制器希望这些文件位于“文件”参数中。

是否可以告诉spring应该以给定名称在请求中传递多个文件?

创建两个带有名称files MockMultiPartFile实例

完整的工作示例,其中添加了Json请求正文以及以下多个文件:

@PostMapping(consumes=MediaType.MULTIPART_FORM_DATA_VALUE)
public void addProduct(@RequestPart(value="addProductRequest") @Valid AddUpdateProductRequest request,
                             @RequestPart(value = "files") final List<MultipartFile> files) throws Exception{

    request.setProductImages(files);
    productService.createProduct(request);
}


@Test
public void testUpdateProduct() throws Exception {


    AddUpdateProductRequest addProductRequest = prepareAddUpdateRequest();

    final InputStream inputStreamFirstImage = Thread.currentThread().getContextClassLoader().getResourceAsStream("test_image.png");
    final InputStream inputStreamSecondImage = Thread.currentThread().getContextClassLoader().getResourceAsStream("test_image2.png");

    MockMultipartFile jsonBody = new MockMultipartFile("addProductRequest", "", "application/json", JsonUtils.toJson(addProductRequest).getBytes());
    MockMultipartFile file1 = new MockMultipartFile("files", "test_image.png", "image/png", inputStreamFirstImage);
    MockMultipartFile file2 = new MockMultipartFile("files", "test_image2.png", "image/png", inputStreamSecondImage);


    ResultMatcher ok = MockMvcResultMatchers.status().isOk();
    mockMvc.perform(MockMvcRequestBuilders.fileUpload("/add-product")
                    .file(file1)
                    .file(file2)
                    .file(jsonBody)
                    .contentType(MediaType.MULTIPART_FORM_DATA_VALUE))
                .andDo(MockMvcResultHandlers.log())
                .andExpect(ok)
                .andExpect(content().string("success"));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM