SpringBoot MultipartFile 上传文件null
开发环境
Springboot 1.5.2
使用方法,一开始直获取文件为null,不加required = false接口无法访问
@PostMapping("/import")
public void importTest(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request){}
按理说springboot自带MultipartFile 可上传文件,不知道为什么获取不到文件,查阅文件可能存在冲突,故使用其他方式
pom导入apache的方法上传包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
添加配置,排除掉本身SpringBoot本身@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
@Configuration
@EnableWebMvc
@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
public class TestUploadFileConfig {
@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
}
以上无法解决新增配置,方式二
/**
* fegin方式远程传输文件配置
*
* @author pyf
*/
public class MultipartSupportConfig {
private final ObjectFactory<HttpMessageConverters> messageConverters;
public MultipartSupportConfig(ObjectFactory<HttpMessageConverters> messageConverters) {
this.messageConverters = messageConverters;
}
@Bean
@Primary
@Scope("prototype")
public Encoder feignFormEncoder() {
return new SpringFormEncoder(new SpringEncoder(messageConverters));
}
}
/**
* 远程调用用户服务相关接口
*
* @author
* @date 2022/7/8
* @apiNote
*/
@FeignClient(value = "test", configuration = MultipartSupportConfig.class)
public interface TestService {
@PostMapping(value = "/uploadFile",consumes = MULTIPART_FORM_DATA_VALUE)
public ResultData<Object> uploadFile(@RequestPart("file") MultipartFile file);
}
模拟multipartFile调用fegin接口上传文件
import cn.hutool.core.lang.Assert;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
import java.util.List;
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class Test{
@Resource
TestService testService;
@Test
public void testUploadFeign() throws IOException {
//模拟获取文件转换成MultipartFile调用第三方接口
File file = new File("D:/Downloads/img/99c3a76404b9cdabe3a77fa3262e034b.jpeg");
FileInputStream fileInputStream = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), "text/plain", IOUtils.toByteArray(fileInputStream));
ResultData resultData = testService.uploadFile(multipartFile);
assertNotNull(resultData);
}
}