项目开发中需要将file转化为MultipartFile,网上百度发现使用org.springframework.mock.web.MockMultipartFile可以
File file3 = new File(fileMap.get("file").toString());
FileInputStream in_file = new FileInputStream(file3);
// 转 MultipartFile
MultipartFile multi = new MockMultipartFile(file3.getName(), in_file);
发现本地环境是可以的 原因是因为有spring-test这个包。
然而项目发布后发现项目启动不了一直报错找不到MockMultipartFile,原因是发布正式版时、根本不会打测试包。所以找不到。
还有就是MockMultipartFile这个东西是单元测试使用的,尽量不要使用这个。
有喜欢的朋友可以关注下头条号《
老徐聊技术
》
可以看到
Multipart
File
是个接口
转成
Multipart
File
格式则需要转成实现
Multipart
File
接口的实现类即可,如下选择转成用
Mock
Multipart
File
实现
首先:需要先引入
依赖
包
<dependency>
<groupId>
org
.
springframework
</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.9</
打开cmd窗口cd 到 工程根目录,比如我的工程是: D:\code\spring-boot-crud。执行 mvn -U idea:idea 命令,完了以后重新运行项目就正常了!
file
转
Multipart
File
的时候会用到
Mock
Multipart
File
当你导入spring-test
依赖
的时候 会跟某些
依赖
冲突(暂未找到具体是哪个冲突)
解决方法 重写一个类去实现
Multipart
File
接口
直接用
Mock
Multipart
File
的源码
public class
Multipart
File
Dto implements
Multipart
File
{
private final String name;
private String origi
org
.
springframework
.
mock
.jndi.ExpectedLookupTemplate.class
org
.
springframework
.
mock
.jndi.SimpleNamingContext.class
org
.
springframework
.
mock
.jndi.SimpleNamingContextBuilder.class
org
.
springframework
.
mock
.
web
.DelegatingServletInputStream.class
org
.
springframework
.
mock
.
web
.DelegatingServletOutputStream.class
org
.
springframework
.
mock
.
web
.HeaderValueHolder.class
org
.
springframework
.
mock
.
web
.
Mock
ExpressionEvaluator.class
org
.
springframework
.
mock
.
web
.
Mock
FilterChain.class
org
.
springframework
.
mock
.
web
.
Mock
FilterConfig.class
org
.
springframework
.
mock
.
web
.
Mock
HttpServletRequest.class
org
.
springframework
.
mock
.
web
.
Mock
HttpServletResponse.class
org
.
springframework
.
mock
.
web
.
Mock
HttpSession.class
org
.
springframework
.
mock
.
web
.
Mock
Multipart
File
.class
org
.
springframework
.
mock
.
web
.
Mock
Multipart
HttpServletRequest.class
org
.
springframework
.
mock
.
web
.
Mock
PageContext.class
org
.
springframework
.
mock
.
web
.
Mock
RequestDispatcher.class
org
.
springframework
.
mock
.
web
.
Mock
ServletConfig.class
org
.
springframework
.
mock
.
web
.
Mock
ServletContext.class
org
.
springframework
.
mock
.
web
.PassThroughFilterChain.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
ActionRequest.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
ActionResponse.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
Multipart
ActionRequest.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
PortalContext.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
PortletConfig.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
PortletContext.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
PortletPreferences.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
PortletRequest.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
PortletRequestDispatcher.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
PortletResponse.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
PortletSession.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
PortletURL.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
RenderRequest.class
org
.
springframework
.
mock
.
web
.portlet.
Mock
RenderResponse.class
org
.
springframework
.test.AbstractDependencyInjectionSpringContextTests.class
org
.
springframework
.test.AbstractSingleSpringContextTests.class
org
.
springframework
.test.AbstractSpringContextTests.class
org
.
springframework
.test.AbstractTransactionalDataSourceSpringContextTests.class
org
.
springframework
.test.AbstractTransactionalSpringContextTests.class
org
.
springframework
.test.AssertThrows.class
org
.
springframework
.test.ConditionalTestCase.class
org
.
springframework
.test.annotation.AbstractAnnotationAwareTransactionalTests.class
org
.
springframework
.test.annotation.DirtiesContext.class
org
.
springframework
.test.annotation.ExpectedException.class
org
.
springframework
.test.annotation.IfPro
file
Value.class
org
.
springframework
.test.annotation.NotTransactional.class
org
.
springframework
.test.annotation.Pro
file
ValueSource.class
org
.
springframework
.test.annotation.Repeat.class
org
.
springframework
.test.annotation.SystemPro
file
ValueSource.class
org
.
springframework
.test.annotation.Timed.class
org
.
springframework
.test.jpa.AbstractAspectjJpaTests.class
org
.
springframework
.test.jpa.AbstractJpaTests.class
org
.
springframework
.test.jpa.OrmXmlOverridingShadowingClassLoader.class
org
.
springframework
.test.
web
.AbstractModelAndViewTests.class
Multipart
File
是spring类型,代表HTML中form data方式上传的文件,
包
含二进制数据+文件名称。
使用
Mock
Multipart
File
but, 是
使用
的,需要导入。因为
使用
到了”spring-test.jar"
所以发现本地环境是可以的 原因是因为有spring-test这个
包
。
然而项目发布后发现项目启动不了一直报错找不到
Mock
Multipart
File
。
原因是发布正式版时,不会打测试
包
。找不到也很正常。根据源码,自己照搬重写一个 方法在项目里...
ClassPathResource resource = new ClassPathResource("XXX.js");
Mock
Multipart
File
m
file
= new
Mock
Multipart
File
("
file
", "XXX.js", "png", resource.getInputStream());
MvcResult mvcResult =
mock
Mvc.perform(
Mock
MvcRequestBuilders.
multipart
("/XX..
微服务项目中服务调用需要生成
multipart
File
问题的几种解决方案。1、引入test
包
,
使用
test
包
中的
Mock
Multipart
File
。2、自定义实现一个
Mock
Multipart
File
(推荐)
<dependency>
<groupId>
org
.power
mock
</groupId>
<artifactId>power
mock
-api-
mock
ito2</artifactId>
模拟功能说明:采用spring-test.jar
包
中的
Mock
Multipart
File
类,模拟文件上传功能,但是在执行相关业务逻辑代码,提示类找不到。后来检查maven
依赖
是我发现s...