最近做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>
原本這個也是防止文件上傳的文件過大所做的一個處理,但是無論上傳的文件多小,它總是攔截上傳的文件,於是將這個代碼註釋掉,問題解決。
分享一下這個錯誤,希望廣大網友能少一些煩惱。