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

Spring Boot多部分文件上载集成测试-空文件

岳志义
2023-03-14

我无法编写将文件上载到控制器的测试。

在这一问题发生的所有事件中,我没有看到任何事情对我有效。

我可以从我的webapp上传和存储文件,但是当我运行测试时,控制器中的文件总是空的

应用程序

import com.mangofactory.swagger.configuration.SpringSwaggerConfig;
import com.mangofactory.swagger.plugin.EnableSwagger;
import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;
import com.wordnik.swagger.model.ApiInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@EnableSwagger
public class Application {

private SpringSwaggerConfig springSwaggerConfig;

@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
    this.springSwaggerConfig = springSwaggerConfig;
}

@Bean
        // Don't forget the @Bean annotation
public SwaggerSpringMvcPlugin customImplementation() {
    return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(
            apiInfo()).includePatterns("/api/.*");
}

private ApiInfo apiInfo() {
    return new ApiInfo("Application", "Upload files", "Play nice", "reece@reececo.com", "Go for your life", "DoesNotExist");
}

public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

控制器

@RequestMapping(method = POST)
@ApiOperation(value = "Multipart file upload", notes = "Upload a file to an ID")
@ApiResponses(value = { @ApiResponse(code = 200, message = "") })
public @ResponseBody String uploadFile(MultipartFile file, @PathVariable String key) {

// Store File

}

测验

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = EasyshareApplication.class)
@WebAppConfiguration
@IntegrationTest
public class FileUploadControllerTest {

@Autowired
private UploadRepository uploadRepository;

private MockMvc restFileMockMvc;

@Before
public void setup() throws Exception {
    FileController fileController= new FileController();
    ReflectionTestUtils.setField(fileController, "uploadRepository", uploadRepository);
    this.restFileMockMvc = MockMvcBuilders.standaloneSetup(fileController).build();
}

@Test
public void testFileUpload() throws Exception{
    MockMultipartFile mockFile = new MockMultipartFile("data", "DATADATADATDATADATA".getBytes());

    Upload upload = uploadRepository.save(new Upload("Description"));
    String key = upload.getKey();

    restFileMockMvc
            .perform(fileUpload("/api/uploads/" + key + "/file")
                .file(mockFile)
                    .param("name", "xyz")
                    .contentType(MediaType.MULTIPART_FORM_DATA))
            .andExpect(status().isCreated())
            .andExpect(jsonPath("$.upload").exists())
            .andExpect(jsonPath("$.ID").exists())
            .andExpect(jsonPath("$.filename").exists())
            .andExpect(jsonPath("$.contentType").exists())
            .andExpect(jsonPath("$.length").exists());
}

@Test
public void testMissingFileUpload() throws Exception{
    String key = "shouldntNeedAKey";

    restFileMockMvc
            .perform(fileUpload("/api/uploads/" + key + "/file"))
            .andExpect(status().isBadRequest());
}
}

共有1个答案

刁丰羽
2023-03-14

如果有人偶然发现了这个问题,我确实解决了这个问题。

我只需在我的REST控制器中为mulipart文件添加注释:

@recestParam(name="file")@recestPart也可以工作。

控制器现在如下所示:

@RequestMapping(method = POST)
@ApiOperation(value = "Multipart file upload", notes = "Upload a file to an ID")
@ApiResponses(value = { @ApiResponse(code = 200, message = "") })
public @ResponseBody String uploadFile(@RequestParam(name = "file") MultipartFile file, @PathVariable String key) {

// Store File

}
 类似资料:
  • 我试图创建一个页面,用户可以张贴图像及其细节。现在,当我测试来自postman的spring boot服务时,我能够成功地在服务中获取文件。当我试图从angular5中做同样的事情时,多部分文件在服务中没有被识别,并且总是得到空数组。 我的角服务代码如下 } 我已经尝试添加标头,如multipart/form-data,并将其设置为un定义。无论哪种方式,我都收到了错误。在发布到这里之前,我已经广

  • 尝试测试上载文件时,获取此“文件”不存在错误,但控制器在测试之外工作良好。文件不在这里有什么原因吗? 控制器 控制器测试

  • Im使用Spring Boot,并希望使用控制器接收多部分文件上传。当发送文件时,我一直得到错误415不支持的内容类型响应,并且控制器从未到达 我尝试在HTML/JSP页面和使用RESTTemplate的独立客户端应用程序中使用Form:Action发送。所有尝试的结果都是一样的 从multipart文档看来,边界参数必须添加到multipart上载,但这似乎与控制器接收不匹配 我的控制器方法设置

  • 关于Spring MVC应用程序中的多部分文件上传问题,我已经看到了很多关于stackoverflow的答案。我一步一步地确保我不会重复别人犯过的错误。 这是我的表格 在pom文件中我有依赖项 因此,当我停在调试器中时,request对象显示文件已被接收,甚至存储在jBoss临时文件夹中,我并不感到惊讶。 你能指出Spring看不到上传的文件我会错过什么吗?

  • 我正在尝试将图像作为广告中的字符串字段上传,但当将文件添加到正文时,我遇到了这个错误:“异常”:“org.springframework.web.multipart.support.MissingServletRequest estPartException”,“消息”:“所需的请求部分'file'不存在”。我在这里寻找有关此问题的答案,但没有任何帮助。我将很高兴得到任何帮助。 我的控制器: 我的

  • 我写了一些相关的代码,使用Spring上传文件,它工作正常,现在我正在为此编写联调案例,但我面临一些问题我的控制器方法, 测试用例 但我正在 我哪里错了?