大家新年好,這一篇,我們來(lái)說(shuō)說(shuō)springmvc的文件上傳。
- 【SpringMvc】從零開(kāi)始學(xué)SpringMvc之初始化(一)
- 【SpringMvc】從零開(kāi)始學(xué)SpringMvc之?dāng)?shù)據(jù)庫(kù)(二)
- 【SpringMvc】從零開(kāi)始學(xué)SpringMvc之實(shí)現(xiàn)用戶登錄(三)
- 【SpringMvc】從零開(kāi)始學(xué)SpringMvc之實(shí)現(xiàn)用戶管理(四)
- 【SpringMvc】從零開(kāi)始學(xué)SpringMvc之文件上傳(五)
首先,需要在配置springmvc-servlet.xml中配置MultipartResolver
<!-- springMVC上傳文件時(shí),需要配置MultipartResolver處理器 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760000"></property>
<property name="maxInMemorySize" value="40960"></property>
</bean>
在WEB-INF/html文件夾下創(chuàng)建upload.html
這里介紹2個(gè)方法,
1.采用multipart提供的file.transfer方法上傳文件
在upload.html中添加form表單
<h1>采用multipart提供的file.transfer方法上傳文件2</h1>
<form name="form2" action="/SpringMvc/file/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file_03" /> <input type="submit" value="fileupload" />
</form>
創(chuàng)建FileController,并添加upload方法
@Controller
@RequestMapping("/file")
public class FileController extends BaseController {
@RequestMapping("")
public String index() {
return "upload";
}
/**
* 單個(gè)文件
*
* @param file
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/upload")
public BaseModel upload(@RequestParam(value = "file_03", required = false) MultipartFile file,
HttpServletRequest request) {
if (file == null || file.isEmpty()) {
return makeModel(ERROR_CODE, "文件不存在");
}
String fileName = file.getOriginalFilename();
File targetFile = new File("D:/ch", getTemFileName(fileName));
if (!targetFile.exists()) {
targetFile.mkdirs();
}
try {
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
return makeModel(SUCC_CODE, "上傳成功");
}
}
需要注意的是,upload方法中的value需與form表單中的name字段保持一致;
通常情況下,我們需要對(duì)上傳的文件進(jìn)行重命名
/**
* 獲取文件后綴
*
* @param name
* @return
*/
public static String subType(String name) {
if (isEmpty(name)) {
return "";
}
int index = name.lastIndexOf(".");
if (index >= 0) {
return name.substring(index);
}
return "";
}
/**
* 獲取臨時(shí)文件名
*
* @param fileName
* @return
*/
public static String getTemFileName(String fileName) {
return getTemple() + subType(fileName);
}
public static String getTemple() {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
return format.format(new Date());
}
我們?cè)跒g覽器中輸入http://localhost:8080/SpringMvc/file/,然后選擇文件,點(diǎn)擊上傳,之后在我們自定義的文件夾下,即可看到我們上傳的文件。

image.png
2.使用spring MVC提供的方法上傳文件
在upload.html中添加form表單
<h1>使用spring MVC提供的方法上傳文件</h1>
<form name="form2" action="/SpringMvc/file/uploadspring" method="post" enctype="multipart/form-data">
<input type="file" name="file_04" />
<input type="submit" value="fileupload" />
</form>
在FileController中添加uploadspring方法
/**
* 多個(gè)文件
*
* @param request
* @return
*/
@ResponseBody
@RequestMapping("/uploadspring")
public BaseModel uploadspring(HttpServletRequest request) {
// CommonsMutipartResolver
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
request.getSession().getServletContext());
// 是否有enctype="multipart/form-data"
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
// 遍歷
Iterator<?> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
//
MultipartFile file = multiRequest.getFile(iter.next().toString());
if (file != null) {
//
File targetFile = new File("D:/ch", getTemFileName(file.getOriginalFilename()));
if (!targetFile.exists()) {
targetFile.mkdirs();
}
try {
file.transferTo(targetFile);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return makeModel(SUCC_CODE, "上傳成功");
}
return makeModel(ERROR_CODE, "文件不存在");
}
return makeModel(ERROR_CODE, "文件不存在");
} else {
return makeModel(ERROR_CODE, "文件不存在");
}
}
跟方法一一樣,我們?cè)跒g覽器中輸入http://localhost:8080/SpringMvc/file/,然后選擇文件,點(diǎn)擊上傳,之后在我們自定義的文件夾下,即可看到我們上傳的文件。

image.png