当前位置: 首页 > 知识库问答 >
问题:

如何测试我是否可以上传一个大的多部分文件

叶书
2023-03-14

如果我尝试推送一个大文件(任何超过1MB大小的文件),我的代码最初会被破坏。它现在工作正常,可以通过在属性文件中添加以下内容来适应我想要的文件大小。

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

但是我如何写一个适当的单元/集成测试,以确保它允许文件大小高达10MB?

下面有一个很好的测试示例(可接受的答案),但它使用模拟文件设置进行测试。使用SpringMVC测试单元测试多部分POST请求

  1. 有没有办法模拟并指定文件大小

这是要测试的方法

@PostMapping(path = "/example", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<SomeResponse> upload(@PathVariable(@RequestPart("file") MultipartFile file) {

    //we won't even get inside thi method and would fail if the file size is over 1MB previously. 

    // It works currently when I add files with size above 1MB 
    // cos I added the above 2 lines (spring.servlet.... in the properties file)

    // some logic which works fine.

    SomeResponse obj = // 
    return new ResponseEntity<>(obj, HttpStatus.OK);
}

这是当前测试(还有其他测试来测试负面场景)

@Test
public void testValidUpload() throws Exception {
    String fileContents = "12345";
    String expectedFileContents = "12345\nSomeData";

    mockServer.expect(requestTo("http://localhost:8080/example"))
        .andExpect(method(HttpMethod.POST))
        .andExpect(expectFile("file", "test.csv", expectedFileContents))
        .andRespond(withStatus(HttpStatus.OK)
                .contentType(MediaType.TEXT_PLAIN)
                .body("done")
        );

    String response = this.mvc.perform(multipart("/example")
        .file(new MockMultipartFile("file", "filename.csv", MediaType.TEXT_PLAIN_VALUE, fileContents.getBytes())))
        .andExpect(status().isOk())
        .andExpect(content().contentType(APPLICATION_JSON))
        .andExpect(jsonPath("responseStatusCode", Matchers.equalTo("200")))
        .andExpect(jsonPath("httpStatus", Matchers.equalTo("OK")))
        .andReturn().getResponse().getContentAsString();

    Response response = objectMapper.readValue(response, Response.class);
    assertEquals(HttpStatus.OK, response.getHttpStatus());
    assertEquals(5, response.id());
}

共有1个答案

高鸿振
2023-03-14

您可以尝试以下方法:

byte[] bytes = new byte[1024 * 1024 * 10];
MockMultipartFile firstFile = new MockMultipartFile("data", "file1.txt", "text/plain", bytes);

见文件。

你也可以参考这篇文章。

 类似资料:
  • 来自文档:“当您使用传输管理器下载文件时,实用程序会自动确定对象是否为多部分” 来源:https://AWS . Amazon . com/fr/blogs/developer/parallelizing-large-downloads-for-optimal-speed/ 这意味着某处有指标(元数据?属性?)可以告诉你一个文件是否是多部分的。所以在用java SDK测试之前,我正在用AWS CL

  • 在中可以实现这样的功能吗 注意这里A是部分着色的。 我知道光凭类是不可能的。(文本显示在) 要实现这一点,有什么解决方案可以单独使用Swing或必须使用CSS? 编辑: 如果这是不可能的摆动,任何解决方案与以下标签?

  • 在Android中使用OKHTTP以多部分方式上传单个大文件(更具体地说,上传到s3)时,我有什么选择?

  • 问题内容: 在页面上,我有: 问题是,如果用户希望在不上载LOGO的情况下编辑信息,则会引发错误:“必须上载正确的错误类型” 因此,如果用户没有在输入框中放入任何东西来上传它,我就不想输入这些条件测试。 我测试: 和 但两者似乎都不起作用。 有任何想法吗? 编辑:也许我不太清楚,我不想测试他是否上传了徽标,我想测试如果他选择了要上传的文件,因为现在,如果他没有选择要上传的文件, php引发错误,提

  • 我正在写一个jar,打算与Spring和Ehcache一起使用。Spring要求为每个元素定义一个缓存,所以我计划为jar定义一个Ehcache,最好是作为jar中的一个资源,可以导入应用程序的主要Ehcache配置。然而,我对示例Ehcache配置文件的阅读和我的谷歌搜索并没有找到任何导入子Ehcache配置文件的方法。 有没有办法导入一个子Ehache配置文件,或者有没有其他方法来解决这个问题

  • 我正在Spring controller中努力实现多部分文件上传。我读过很多问题,谷歌,但似乎什么都不管用。 我明白了 我的BE控制器: FE,angularJS: HTML: 还有应用程序。属性包括: 更新: 当我按照@Byeon0gam的建议从我的控制器中删除@RequestParam时,我不再会遇到这个错误,但是我的文件在控制器中是空的。虽然在FE服务中,如我所见,它不是空的: