最近做SSM文件上传,遇到了这样的问题:
前台代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--添加一个enctype="multipart/form-data"--%>
<form action="${con}/file/upload" method="post" enctype="multipart/form-data">
文件:<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
后台代码如下:
@Controller
@RequestMapping("/file")
public class FileController {
private static String uploadPath = "F:/测试" + File.separator;
// 入参就可以代表上传的文件
@RequestMapping("/upload")
public String upload(@RequestParam("file")MultipartFile multipartFile, Model model){
// 1 判断
if (multipartFile != null && !multipartFile.isEmpty()) {
// 不空才传
// 2 获取原始的文件名
String originalFilename = multipartFile.getOriginalFilename();
// 3 先截取原文件的文件名前缀,不带后缀
String fileNamePrefix = originalFilename.substring(0, originalFilename.lastIndexOf("."));
// 4 加工处理文件名,将文件名+时间戳
String newFileNamePrefix = fileNamePrefix + new Date().getTime();
// 5 得到新文件名
String newFileName = newFileNamePrefix + originalFilename.substring(originalFilename.lastIndexOf("."));
// 6 构建文件对象
File file = new File(uploadPath + newFileName);
// 7 上传
try {
multipartFile.transferTo(file);
model.addAttribute("fileName",newFileName);
} catch (IOException e) {
e.printStackTrace();
}
}
return "uploadSuccess";
}
xml的文件上传配置:
<!--文件上传解析器-->
<!--id必须是multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--定义文件上传的总大小 单位是bytes-->
<property name="maxUploadSize" value="102400000000"/>
<!--指定上传的编码-->
<property name="defaultEncoding" value="UTF-8"/>
<!--单文件上传大小-->
<property name="maxUploadSizePerFile" value="1024000000"/>
</bean>
我在网上搜了一天,基本上问题都是出在这三个地方。问题一般如下:
- 前台的name 与 后台的 RequestParam的名字不一致
- 忘了放入文件上传的配置,而且id一定是multipartResolver
但是我的问题确极其特别,我查了很多,都不对。于是找同学借了个文件上传的demo测试,发现上面这三处都是一模一样的,但是他的demo可以上传成功,于是我就复制了他的web.xml,发现问题出现在web.xml上。
真正的问题出现在下面这个代码里:
<multipart-config>
<max-file-size>100000000000000</max-file-size>
</multipart-config>
原本这个也是防止文件上传的文件过大所做的一个处理,但是无论上传的文件多小,它总是拦截上传的文件,于是将这个代码注释掉,问题解决。
分享一下这个错误,希望广大网友能少一些烦恼。