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);
    }
}
posted @ 2022-12-28 10:35  Java程序位移师  阅读(886)  评论(0)    收藏  举报