Spring MVC文件上傳處理

以下示例顯示如何在使用Spring MVC框架的表單中上傳文件和處理。首先使用Eclipse IDE來創(chuàng)建一個WEB工程,實現(xiàn)一個上傳文件并保存的功能哪自。并按照以下步驟使用Spring Web Framework開發(fā)基于動態(tài)表單的Web應用程序:

  1. 創(chuàng)建一個名稱為 FileUpload 的動態(tài)WEB項目。
  2. com.yiibai.springmvc 包下創(chuàng)建兩個Java類FileModel, FileUploadController流椒。
  3. jsp子文件夾下創(chuàng)建兩個視圖文件:fileUpload.jspsuccess.jsp
  4. WebContent文件夾下創(chuàng)建一個文件夾:temp明也。
  5. 下載Apache Commons FileUpload庫:commons-fileupload.jarApache Commons IO庫:commons-io.jar镣隶。把它們放在CLASSPATH中。
  6. 最后一步是創(chuàng)建所有源和配置文件的內(nèi)容并運行應用程序诡右,詳細如下所述。

完整的項目文件目錄結(jié)構(gòu)如下所示 -

FileModel.java 的代碼如下所示 -

package com.yiibai.springmvc;

import org.springframework.web.multipart.MultipartFile;

public class FileModel {
   private MultipartFile file;

   public MultipartFile getFile() {
      return file;
   }

   public void setFile(MultipartFile file) {
      this.file = file;
   }
}

FileUploadController.java 的代碼如下所示 -

package com.yiibai.springmvc;

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletContext;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.util.FileCopyUtils;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class FileUploadController {
    
   @Autowired
   ServletContext context; 

   @RequestMapping(value = "/fileUploadPage", method = RequestMethod.GET)
   public ModelAndView fileUploadPage() {
      FileModel file = new FileModel();
      ModelAndView modelAndView = new ModelAndView("fileUpload", "command", file);
      return modelAndView;
   }

   @RequestMapping(value="/fileUploadPage", method = RequestMethod.POST)
   public String fileUpload(@Validated FileModel file, BindingResult result, ModelMap model) throws IOException {
      if (result.hasErrors()) {
         System.out.println("validation errors");
         return "fileUploadPage";
      } else {            
         System.out.println("Fetching file");
         MultipartFile multipartFile = file.getFile();
         String uploadPath = context.getRealPath("") + File.separator + "temp" + File.separator;
         //Now do something with file...
         FileCopyUtils.copy(file.getFile().getBytes(), new File(uploadPath+file.getFile().getOriginalFilename()));
         String fileName = multipartFile.getOriginalFilename();
         model.addAttribute("fileName", fileName);
         return "success";
      }
   }
}

FileUpload-servlet.xml 的代碼如下所示 -

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans     
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="com.yiibai.springmvc" />

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp" />
    </bean>

    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />
</beans>

這里的第一個服務方法fileUploadPage()轻猖,我們已經(jīng)在名為“command”的ModelAndView對象中傳遞了一個空的FileModel對象帆吻,因為如果JSP文件中使用<form:form>標簽,spring框架期望一個名稱為“command”的對象咙边。 因此猜煮,當調(diào)用fileUploadPage()方法時次员,它返回fileUpload.jsp視圖。
第二個服務方法fileUpload()將根據(jù) URL => FileUpload/fileUploadPage上的POST方法進行調(diào)用王带。將根據(jù)提交的信息準備要上傳的文件淑蔚。最后從服務方法返回“success”視圖,這將呈現(xiàn)success.jsp視圖愕撰。

fileUpload.jsp 的代碼如下所示 -

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<html>
<head>
<title>Spring MVC上傳文件示例</title>
</head>
<body>
    <form:form method="POST" modelAttribute="fileUpload"
        enctype="multipart/form-data">
      請選擇一個文件上傳 : 
      <input type="file" name="file" />
        <input type="submit" value="提交上傳" />
    </form:form>
</body>
</html>

這里使用帶有value =“fileUpload”modelAttribute屬性來映射文件用服務器模型上傳控件刹衫。

success.jsp 的代碼如下所示 -

<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Spring MVC上傳文件示例</title>
</head>
<body>
    文件名稱 :
    <b> ${fileName} </b> - 上傳成功!
</body>
</html>

完成創(chuàng)建源和配置文件后搞挣,發(fā)布應用程序到Tomcat服務器带迟。

現(xiàn)在啟動Tomcat服務器,現(xiàn)在嘗試訪問URL => http://localhost:8080/FileUpload/fileUploadPage 囱桨,如果Spring Web應用程序沒有問題仓犬,應該看到以下結(jié)果:

提交所需信息后,點擊提交按鈕提交表單舍肠。 如果 Spring Web 應用程序沒有問題搀继,應該看到以下結(jié)果:

參考:http://www.yiibai.com/spring_mvc/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市翠语,隨后出現(xiàn)的幾起案子叽躯,更是在濱河造成了極大的恐慌,老刑警劉巖啡专,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件险毁,死亡現(xiàn)場離奇詭異,居然都是意外死亡们童,警方通過查閱死者的電腦和手機畔况,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來慧库,“玉大人跷跪,你說我怎么就攤上這事∑氚澹” “怎么了吵瞻?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長甘磨。 經(jīng)常有香客問我橡羞,道長,這世上最難降的妖魔是什么济舆? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任卿泽,我火速辦了婚禮,結(jié)果婚禮上滋觉,老公的妹妹穿的比我還像新娘签夭。我一直安慰自己齐邦,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布第租。 她就那樣靜靜地躺著措拇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慎宾。 梳的紋絲不亂的頭發(fā)上丐吓,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機與錄音璧诵,去河邊找鬼汰蜘。 笑死,一個胖子當著我的面吹牛之宿,可吹牛的內(nèi)容都是我干的族操。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼比被,長吁一口氣:“原來是場噩夢啊……” “哼色难!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起等缀,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤枷莉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尺迂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笤妙,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年噪裕,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹲盘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡膳音,死狀恐怖召衔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祭陷,我是刑警寧澤苍凛,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站兵志,受9級特大地震影響醇蝴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜想罕,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一哑蔫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦闸迷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鸠蚪,卻和暖如春今阳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背茅信。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工盾舌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蘸鲸。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓妖谴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親酌摇。 傳聞我的和親對象是個殘疾皇子膝舅,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容