springMVC中上傳圖片


上傳圖片,很常見的問題,基本每個人都會遇到,但是個人認為在springMVC中上傳圖片相對來說是比較簡單的,因為框架已經幫我們做好了許多事情。

這篇文章所用的環境:spring4.3.3 、jdk1.8 、eclipse。

環境准備

如果項目中沒有導入以下jar包請先導入,這里有:http://download.csdn.net/download/u011403655/8559545

commons-fileupload-1.2.2.jar

commons-io-2.4.jar

 

springmvc.xml配置文件中配置插件

在springmvc.xml中加入這一個配置,可以配置文件上傳的最大限制。

<!-- 文件上傳 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize">
            <value>5242880</value>
        </property>
    </bean>

 

form中加入一個屬性enctype="multipart/form-data"

<form action="${pageContext.request.contextPath}/addPet.action" method="post" enctype="multipart/form-data">
  <
input type="file" required="required" name="pic" id="exampleInputFile">
...

注意這里的input,name屬性是pic,可以直接映射到controller方法的同名參數中。

 

controller中的方法

@RequestMapping("addPet.action")
public
ModelAndView addPet(String name, double price, String introduce, MultipartFile pic, String classifyName) throws IllegalStateException, IOException {
  if (!pic.isEmpty()) {
            String path = "E:\\寵物網站\\image\\";
            String originalFileName = pic.getOriginalFilename();
            // 新的圖片名稱
            String newFileName = UUID.randomUUID() + originalFileName.substring(originalFileName.lastIndexOf("."));
            // 新的圖片
            File newFile = new File(path + newFileName);
            // 將內存中的數據寫入磁盤
            pic.transferTo(newFile);
        }

這里的控制器中的方法參數是 MultipartFile pic,和表單元素中的name是一一對應的,新的文件命名用UUID生成字符串避免文件名重復,同時截取圖片的后綴名;最后再把圖片寫到磁盤上去。到此,就完成了圖片的上傳。

 

圖片在頁面中的顯示

web程序是在tomcat中運行的,但是這里的圖片是放到了本地的磁盤上的,怎么通過tomcat訪問到呢?這篇文章是eclipse,在eclipse中可以配置,雙擊打開tomcat:

選擇modules--->Add Extenal Web Modules--->Document base (就是圖片存放在磁盤上的絕對路徑),path就是在tomcat中訪問的路徑,我這里用的是 /image,通過這樣的配置,在tomcat中通過 localhost:8080/image/圖片名稱全稱 就能訪問到圖片。

 

 

 

測試一下,在瀏覽器中如果通過上述url能訪問到圖片就說明配置成功。這樣在jsp頁面中的圖片的路徑就要寫成 src="/image/圖片全稱"才能訪問到圖片,不能再加上項目名了。

 

 其實上述的配置過程就是在tomcat中添加了一些配置,配置了一個虛擬目錄,如果沒有用eclipse,或者嫌eclipse手動配置麻煩,其實可以通過在server.xml中進行配置,在<Host></Host> 中間加入如下配置:

<Context docBase="E:\寵物網站\image" path="/image" reloadable="true"/>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM