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

yeliang99

我的控制器使用“org.apache.commons.fileupload”实现了文件上传。看见:

 @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);
    }

我的控制器是对的,它在我的 web 项目中成功了,但我想使用 MvcMock 测试它,它有一些错误,请参阅:有人可以帮助我吗?

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

我不知道为什么它说我的文件是空的。我的英语很差,如果有人可以帮助我,非常感谢。

穆罕默德·萨努拉

你可以试试下面的吗?

mockMvc.perform(
  MockMvcRequestBuilders.multipart(baseUrl+"/upload")
    .file(multiPartFile)
).andReturn();

更新:

您需要更新控制器来处理MultipartFile

@PostMapping("/upload")
public String upload2(@RequestParam(name="nameOfRequestParamWhichContainsFileData")
     MultipartFile uploadedFile, HttpServletRequest request) throws Exception {
  //the uploaded file gets copied to uploadedFile object. 
}

您无需使用其他库来管理文件上传。您可以使用 Spring MVC 提供的文件上传功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用MockMvc集成测试用户更新控制器

SpringBoot:使用Apache Commons FileUpload的大型流文件上传

如何使用MockMVC传递控制器的@RequestBody参数

如何使用Mockmvc处理控制器异常

java.lang.ClassNotFoundException:org.apache.commons.fileupload.FileItemFactory

春天MockMvc - 如何测试REST控制器的删除请求?

如何通过MockMvc使用构造函数注入来测试控制器

如何使用Eclipse安装org.apache.commons.cli

使用MockMvc测试控制器时,发生参数传递错误

MockMvc控制器测试并返回NullPointerException

MockMvc测试未到达控制器

无法通过Spring Boot multipart.resolve-lazily使用Apache Commons FileUpload

使用org.apache.commons.logging.LogFactory.getLog的最佳实践

使用Maven时org.apache.commons不存在

使用org.apache.commons.net.ftp.FTPClient保护FTP

使用org.apache.commons.validator验证IBAN

org.apache.commons.net.ftp使用其他端口

Spring-如何正确使用@Autowired防止控制器/ MockMvc为空?

Spring MVC-AngularJS-文件上传-org.apache.commons.fileupload.FileUploadException

文件上载“ multipart / form”异常org.apache.commons.fileupload.FileUploadBase $ InvalidContentTypeException

java.lang.NoSuchMethodError:org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest

无法解析多部分servlet请求,嵌套异常为org.apache.commons.fileupload.FileUploadException

如何使用org.apache.commons.csv包在Java中打印.csv文件的标题?

如何在Java中使用org.apache.commons.lang命名空间?

如何使用gradle将org.apache.commons.lang3添加到AndroidStudio

如何在 import org.apache.commons.math3.analysis.integration.SimpsonIntegrator 中使用标准的 SimpsonIntegrator;

MockMVC在我的存储库中的@Query或不使用它修改我的控制器?

MockMvc是否有资格进行WebFlux控制器测试?

正确使用Apache Commons Configuration