基於spring3.0 MVC框架的文件上傳(源碼+解析)

      最近在研究springMVC,要想很好的應用前臺框架,其中都逃不開要對文件上傳的消化吸收,當然,springMVC

也不例外。下面就對springMVC的文件上傳做一個解析,歡迎品讀。


配置文件上傳的解析器

<!-- 處理文件上傳 -->
	<!-- 通用的多部分解析器 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<!-- 設置編碼格式,默認是ISO-8859-1 -->
		<property name="defaultEncoding" value="gbk"/>
		<!-- 設置最大內存容量,當本地容量達到上限後持久化到數據庫 -->
		<property name="maxInMemorySize" value="10240"/>
		<!-- 上傳後的目錄名,這裏爲本地臨時路徑。設置爲默認將文件上傳到upload文件夾下 -->
		<property name="uploadTempDir" value="/upload/"/>
		<!-- 上傳最大文件大小,-1爲無限制 -->
		<property name="maxUploadSize" value="-1"/>
		
	</bean></span>


配置操作類controller

<span style="font-family:SimSun;font-size:18px;">package com.mytest.controller;

import java.io.File;
import java.util.Date;
import javax.servlet.ServletContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.ServletContextAware;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

@Controller
public class FileUploadController implements ServletContextAware{

	private ServletContext servletContext;
	
	public void setServletContext(ServletContext context){
		this.servletContext=context;
	}
	/**
	 * 方法說明:文件上傳
	 * 映射訪問方法upload.do
	 * method=RequestMethod.POST,訪問方式爲post時才被執行
	 * @RequestParam("file") ,必須要寫
	 * @param name  設置的文件名
	 * @param file  上傳目標文件
	 * @return
	 */
	@RequestMapping(value="upload.do", method=RequestMethod.POST)
	public String handleUploadFile(String name,@RequestParam("file") CommonsMultipartFile file){		
		if(!file.isEmpty()){//如果選中了上傳目標文件
			//獲取本地存儲路徑,上傳文件暫時保存到本地臨時路徑下,當內存容量達到上限後持久化到磁盤中
			String path=this.servletContext.getRealPath("/tmp"); 
			System.out.println(path);
			//獲取要上傳目標文件的原來的文件名
			String fileName=file.getOriginalFilename();
			//獲取上傳目標文件的文件類型
			String fileType=fileName.substring(fileName.lastIndexOf("."));
			System.out.println(fileType);
			//在臨時路徑下新建一個文件夾
			File newFile=new File(path,new Date().getTime()+fileType);
			try {
				//將上傳的文件寫入新建的文件中
				file.getFileItem().write(newFile);				
			} catch (Exception e) {
				e.printStackTrace();
			}
			//重定向到上傳成功頁面
			return "redirect:upload_ok.jsp";
		}
		else{
			//重定向到上傳失敗頁面
			return "redirect:upload_error.jsp";
		}
	}		
}</span>

文件上傳入口

<span style="font-family:SimSun;font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>springmvc文件上傳demo</title>
	</head>
	<body>
		<form action="upload.do" method="post" enctype="multipart/form-data">
			<input type="text" name="name"/>
			<input type="file" name="file"/>
			<input type="submit"/>
		</form>
	</body>
</html></span>

上傳成功跳轉頁面

<span style="font-family:SimSun;font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<title>文件上傳</title>
  </head>
  <body>
	   <h1>恭喜您,文件上傳成功!</h1>
  </body>
</html>
</span>

失敗跳轉頁面

<span style="font-family:SimSun;font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  	<title>文件上傳</title>
  </head>
  <body>
	   <h1>很抱歉,文件上傳失敗!</h1>
  </body>
</html></span>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章