【问题标题】:Spring MVC test Mulitple file uploadSpring MVC 测试多文件上传
【发布时间】:2018-03-20 16:45:48
【问题描述】:

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

 @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 作为保存上传文件的参数的名称。我的控制器预计这些文件将在“文件”参数中。

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

【问题讨论】:

    标签: java spring-mvc spring-test-mvc


    【解决方案1】:

    创建两个名为filesMockMultiPartFile 实例

    完整的工作示例,添加了 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"));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2015-11-03
      相关资源
      最近更新 更多