SpringMVC(tomcat)文件上传(MultipartFile)遇到的一些问题及解决

这篇博客讲述了在SpringMVC使用Tomcat进行文件上传时遇到的问题,包括404错误和多部分解析异常。作者尝试了在Controller中设置返回值、在DispatcherServlet上下文配置多部分解析器,以及在web.xml中配置`multipart-config`,通过这些方法解决了问题。此外,还对比了使用多部分解析器与不使用时的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

部分代码:

提交文件的表单

<form action="doUpload||../course/doUpload" method="post" enctype="multipart/form-data">
		<input type="file" name="file" />
		<input type="submit" value="提交" >
	</form>


Controller类

@Controller
@RequestMapping("/course")
public class UploadFile {

	private static Logger log=LoggerFactory.getLogger(UploadFile.class);
	
	//跳转到文件选择页面
	@RequestMapping("/upload")
	public String fileup(){
		return "view/fileup";
	}
	
	//上传文件
	@RequestMapping(value="/doUpload",method=RequestMethod.POST)
	public String copyFile(@RequestParam("file") MultipartFile file) throws IOException
	{
		if(!file.isEmpty()){
		log.debug("file proccesing...");
		FileUtils.copyInputStreamToFile(file.getInputStream(), new File("E:\\MyEclipseWorkPlace\\tupian.jpg"));
		}
		return "success";
	}

1.当表单的action为"course/doUpload"时:

跳转到表单页面的url:http://localhost:8082/spring-mvc-study/course/upload    OK!

提交后的url就会变成:http://localhost:8082/spring-mvc-study/course/course/doUpload  然后报404错

我试着把上传文件的那个返回值改成:return "redirect:success"或者将类RequestMapping(course)都不行

似乎是Tomact服务器不能跳到上一层url然后进行跳转?


2.我已经在DispatcherServlet的上下文中配置了

<!--多部分解析器 -->
    <bean id="fileResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="52428800"></property>
        <property name="defaultEncoding" value="utf-8"></property>
        <property name="resolveLazily" value="true"></property>
    </bean>

但是会有异常抛出:Unable to process parts as no multi-part configuration has been provided

这个需要在web.xml文件的servlet标签中配置:

<multipart-config>
            <max-file-size>52428800</max-file-size>
            <max-request-size>52428800</max-request-size>
            <file-size-threshold>0</file-size-threshold>
</multipart-config>

如果不在DispatcherServlet中配置文件的页面解析器,也可以上传成功,但是耗时相对较长


eg:同样上传一张图片(33722字节),有多部分解析器花费42ms,没有多部分解析器花费64ms





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值