Java Web之SpringMVC 上傳文件

根據(jù)之前所說,學(xué)習(xí)一款MVC框架,必須要知道文件怎么上傳的,那么今天就來學(xué)習(xí)一下,SpringMVC是如何進(jìn)行文件上傳的,需要進(jìn)行哪些配置,代碼是如何編寫的。

首先是web.xml的配置

<?xml version="1.0" encoding="UTF-8"?> 
<servlet> 
        <servlet-name>upload</servlet-name>    
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
        <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
        <servlet-name>upload</servlet-name> 
        <url-pattern>/</url-pattern> 
</servlet-mapping> 

<!—加入過濾器就是為了上傳名字是中文的文件時(shí) 上傳到服務(wù)器上的文件名不會(huì)亂碼--> 
<filter> 
        <filter-name>SpringCharacterEncodingFilter</filter-name> 
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
        <init-param> 
              <param-name>encoding</param-name> 
              <param-value>UTF-8</param-value> 
         </init-param> 
</filter> 
<filter-mapping> 
        <filter-name>SpringCharacterEncodingFilter</filter-name> 
        <url-pattern>/*</url-pattern> 
</filter-mapping> 

SpringMVC的配置文件upload-servlet.xml

<?xml version="1.0" encoding="UTF-8"?> 
<context:component-scan base-package="com.yf.upload"/> 
<mvc:annotation-driven/>
   <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
        <property name="prefix" value="/WEB-INF/jsp/"/> 
        <property name="suffix" value=".jsp"/> 
</bean>

    <!-- SpringMVC上傳文件時(shí),需配置MultipartResolver處理器 --> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <!-- 指定所上傳文件的總大小不能超過200KB。注意maxUploadSize屬性的限制不是針對(duì)單個(gè)文件,而是所有文件的容量之和 --> 
        <property name="maxUploadSize" value="200000"/> 
</bean> 
    <!-- SpringMVC在超出上傳文件限制時(shí),會(huì)拋出org.springframework.web.multipart.MaxUploadSizeExceededException        --> 
    <!-- 該異常是SpringMVC在檢查上傳的文件信息時(shí)拋出來的,而且此時(shí)還沒有進(jìn)入到Controller方法中 --> 
<bean id="exceptionResolver"class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
        <property name="exceptionMappings"> 
            <props> 
            <!-- 遇到MaxUploadSizeExceededException異常時(shí),自動(dòng)跳轉(zhuǎn)到/WEB-INF/jsp/error_fileupload.jsp頁(yè)面 --> 
                <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop> 
            </props> 
        </property> 
    </bean> 
</beans> 

用于上傳的表單頁(yè)面/WEB-INF/jsp/upload.jsp

<%@ page language="java" pageEncoding="UTF-8"%> 
<form  method="POST" enctype="multipart/form-data"> 
    yourfile: <input type="file" name="myfiles"/><br/> 
    yourfile: <input type="file" name="myfiles"/><br/> 
    yourfile: <input type="file" name="myfiles"/><br/> 
    <input type="submit" value="上傳文件"/> 
</form> 

上傳文件過大時(shí)的頁(yè)面/WEB-INF/jsp/error_fileupload.jsp

<%@ page language="java" pageEncoding="UTF-8"%> 
<h1>文件過大,請(qǐng)重新選擇</h1> 

最后是核心的UploadController.java

/**
 * SpringMVC中的文件上傳步驟:
 * @第一步:由于SpringMVC使用的是commons-fileupload實(shí)現(xiàn),故將其組件引入項(xiàng)目中,這里用到的是commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar
 * @第二步:在####-servlet.xml中配置MultipartResolver處理器??稍诖思尤雽?duì)上傳文件的屬性進(jìn)行限制
 *@第三步:在Controller的方法中添加MultipartFile參數(shù)。該參數(shù)用于接收表單中file組件的內(nèi)容
 *@第四步:編寫前臺(tái)表單。注意enctype="multipart/form-data"以及<input type="file" name="**"/> name要和后臺(tái)接收參數(shù)時(shí)的名字相同
*/ 
@Controller
public class TestController
{
  @RequestMapping(value="/uploadfile",method=RequestMethod.GET)
  public String upLoadFile()
   {
       return "upload";
   }
  @RequestMapping(value="/uploadfile",method=RequestMethod.POST)
  public String upLoadFile(@RequestParam MultipartFile[] myfiles, HttpServletRequest request) throws IOException
   { 
      //如果只是上傳一個(gè)文件,則只需要MultipartFile類型接收文件即可,而且無需顯式指定@RequestParam注解 
      //如果想上傳多個(gè)文件,那么這里就要用MultipartFile[]類型來接收文件,并且還要指定@RequestParam注解 
      //并且上傳多個(gè)文件時(shí),前臺(tái)表單中的所有<input type="file"/>的name都應(yīng)該是myfiles,否則參數(shù)里的myfiles無法獲取到所有上傳的文件 
       for(MultipartFile myfile : myfiles)
      { 
          if(myfile.isEmpty())
          { 
                System.out.println("文件未上傳"); continue;
          }
        else
          { 
                System.out.println("文件長(zhǎng)度: " + myfile.getSize()); 
                System.out.println("文件類型: " + myfile.getContentType()); 
                System.out.println("文件名稱: " + myfile.getName()); 
                System.out.println("文件原名: " + myfile.getOriginalFilename()); 
                System.out.println("==================="); 

                //如果用的是Tomcat服務(wù)器,則文件會(huì)上傳到\%TOMCAT_HOME%\webapps\YourWebProject\WEB-INF\upload\文件夾中 
                String realPath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload"); 
                //這里不必處理IO流關(guān)閉的問題,因?yàn)镕ileUtils.copyInputStreamToFile()方法內(nèi)部會(huì)自動(dòng)把用到的IO流關(guān)掉,我是看它的源碼才知道的 
                FileUtils.copyInputStreamToFile(myfile.getInputStream(), new File(realPath + "/" +myfile.getOriginalFilename())); 
           } 
       } 
          return " success_fileupload "; 
    } 
} 

上傳文件成功的頁(yè)面/WEB-INF/jsp/success_fileupload.jsp

<%@ page language="java" pageEncoding="UTF-8"%> 
<h1>恭喜你,文件上傳成功</h1> 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容