天天看點

SpringMVC學習系列(六)------圖檔的上傳

前言

    在表單資料中,我們可能會遇到頭像、照片等圖檔的上傳等需求,那麼如果表單中包含一個圖檔元素,我們在controller中應該如何接收呢?

正文

    在實際的項目中,我們通常都會有專門的圖檔伺服器來存儲圖檔,這裡我們為了簡單,直接使用自己的本地目錄來虛拟一個圖檔路徑,隻要能達到圖檔上傳的目的就行。我們使用tomcat的虛拟目錄來實作:

    在tomcat目錄下的conf/server.xml中添加:

<Context docBase="本地目錄" path="/pic" reloadable="false"/>

,配置了如上的虛拟目錄後,通路

http://localhost:8080/pic

就可以通路配置的本地目錄下的圖檔。

    要實作檔案上傳,要再pom檔案中添加以下依賴:

<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>
           

其次還要再springmvc.xml檔案中配置多媒體解析器:

<!-- 配置多媒體檔案解析器 -->
    <!-- 檔案上傳 -->
    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 設定上傳檔案的最大尺寸為5MB -->
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
    </bean>
           

我們在原來的登入頁面的jsp中加入一個檔案上傳的input:

<form action="${pageContext.request.contextPath }/fileupload.action" enctype="multipart/form-data" method="post">
        賬号:<input type="text" name="username">
        密碼:<input type="password" name="password">
        <br/>
        自定義日期格式資料測試:
        <input type="text" name="texttime" value="<fmt:formatDate value='${texttime}' pattern='yyyy-MM-dd HH:mm:ss'/>"/>   
        <h3>${data}</h3>
        <input type="file" name="picFile">
        <input type="submit" value="登入">
    </form>
           

**需要注意的是,如果要使用檔案上傳的功能,form表單必須有一個

enctype="multipart/form-data"

屬性,且表單的送出方式為post,這樣子在點選登入按鈕的時候,表單會送出到背景controller的方法中:

@RequestMapping("/fileupload")
    public String uploadPic(MultipartFile picFile, Model model) throws Exception {
        //生成新的檔案名
        String picName = UUID.randomUUID().toString();
        //擴充名
        String oriName = picFile.getOriginalFilename();
        String extName = oriName.substring(oriName.lastIndexOf("."));
        //儲存檔案
        picFile.transferTo(new File("F:\\temp\\" + picName + extName));
        model.addAttribute("picName", picName + extName);
        return "/WEB-INF/jsp/success.jsp";
    }
           

可以看到,在這裡我們如果想要接受頁面的圖檔,要使用MultipartFile這個對象來接收,且屬性名要和前台input的屬性名稱一緻。在這個方法中,我們生成了一個新的檔案名,并将其放在本地目錄下,最後傳回了一個success的jsp頁面,并在model中将新圖檔的名稱攜帶了過去。在success。jsp中是這樣取值的:

<body>
    <h1>圖檔儲存成功</h1>

    <input type="image" src="/pic/${picName}">
</body>
           

這裡直接将圖檔名取出來,在一個圖檔input文本框中顯示出來。

SpringMVC學習系列(六)------圖檔的上傳

圖檔正常顯示,說明我們的檔案上傳成功,而在本地目錄下,也儲存了剛才上傳的圖檔。

總結

    在本文中對SpringMVC的圖檔上傳的功能做了一個簡述,在實際的工作中,使用七牛雲等圖檔伺服器将會更加友善的實作圖檔的管理和存儲。

繼續閱讀