如何使用MockMVC测试使用org.apache.commons.fileupload的控制器?

问题描述 投票:0回答:1

我的控制器使用“ org.apache.commons.fileupload”实现了文件UPload。看到它:

 @PostMapping("/upload")
    public String upload2(HttpServletRequest request) throws Exception {

        ServletFileUpload upload = new ServletFileUpload();
        FileItemIterator iter = upload.getItemIterator(request);
        boolean uploaded = false;

        while (iter.hasNext() && !uploaded) {
            FileItemStream item = iter.next();
            if (item.isFormField()) {
                item.openStream().close();
            } else {
                String fieldName = item.getFieldName();
                if (!"file".equals(fieldName)) {
                    item.openStream().close();
                } else {

                    InputStream stream = item.openStream();
                    // dosomething here.
                    uploaded = true;
                }
            }
        }
            if (uploaded) {
                return "ok";
            } else {
                throw new BaseResponseException(HttpStatus.BAD_REQUEST, "400", "no file field or data file is empty.");
            }

        }

我的MockMvc代码是

    public void upload() throws Exception {
        File file = new File("/Users/jianxiaowen/Documents/a.txt");
        MockMultipartFile multipartFile = new MockMultipartFile("file", new FileInputStream(file));
        HashMap<String, String> contentTypeParams = new HashMap<String, String>();
        contentTypeParams.put("boundary", "----WebKitFormBoundaryaDEFKSFMY18ehkjt");
        MediaType mediaType = new MediaType("multipart", "form-data", contentTypeParams);
        MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post(baseUrl+"/upload")
                .content(multipartFile.getBytes())
                .contentType(mediaType)
                .header(Origin,OriginValue)
                .cookie(cookie))
                .andReturn();
        logResult(mvcResult);
    }

我的控制器是正确的,它已经成功完成了我的网络项目,但我想使用MvcMock对其进行测试,它有一些错误,请参见:有人可以帮助我吗?

"status":"400","msg":"no file field or data file is empty.","data":null

我不知道为什么它说我的文件为空。我的英语不好,如果有人能帮助我,非常感谢。

spring-boot file-upload mockmvc
1个回答
0
投票

您可以尝试以下吗?

mockMvc.perform(
  MockMvcRequestBuilders.multipart(baseUrl+"/upload")
    .file(multiPartFile)
).andReturn();
© www.soinside.com 2019 - 2024. All rights reserved.