1. 程式人生 > >SpringMVC 框架學習——檔案上傳

SpringMVC 框架學習——檔案上傳

這一篇博文主要來總結下SpringMVC中實現檔案上傳的步驟。但這裡我只講單個檔案的上傳。

環境準備

SpringMVC上傳檔案的功能需要兩個jar包的支援,如下:
這裡寫圖片描述
工程中肯定要匯入以上兩個jar包,主要是CommonsMultipartResolver解析器依賴commons-fileupload和commons-io這兩個jar包。

單個檔案的上傳

前臺頁面

我們要改造editItem.jsp頁面,主要是在form表單中新增商品圖片一欄,效果我截圖如下:
這裡寫圖片描述
注意一點的是form表單中別忘了寫enctype="multipart/form-data"屬性。

對多部件型別multipart解析

意思就是說針對上面的enctype=”multipart/form-data”型別,SpringMVC需要對multipart型別的資料進行解析,在springmvc.xml中配置multipart型別解析器即可。如下:

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

建立檔案儲存的虛擬目錄

在上傳檔案之前,首先要建立一個虛擬目錄來儲存檔案,這個虛擬目錄會對應磁碟上的一個實際的目錄,在實際開發中肯定會有一個伺服器專門儲存資源的,在這裡我們就用本地磁碟來儲存檔案,然後對映一個虛擬目錄,用來在程式中指定獲取檔案的路徑(其實上面前臺頁面editItem.jsp中,那個src=”/pic/${item.pic}”中的/pic就是虛擬目錄)。
建立的方法有兩種:一是在Eclipse中雙擊tomcat伺服器,就會彈出下面的框框:
這裡寫圖片描述


選擇Modules,然後點選【Add External Web Module…】,在彈出的對話方塊中進行如下操作,都在圖裡面了。
這裡寫圖片描述
設定好後,儲存即可,這樣上傳的檔案都會儲存到Document base指定的目錄中,相當於虛擬對映到Path指定的目錄中,程式中獲取這個檔案,要從Path指定的虛擬目錄中獲取,即我上面的/pic。我可舉一個例子,將一個圖片(例如,0d318effd664668f555d43966b3294a6_b.jpg)拷貝到Document base指定的目錄中,即F:\temp\images目錄中,然後啟動tomcat伺服器,在瀏覽器位址列中輸入url訪問地址——http://localhost:8080/pic/0d318effd664668f555d43966b3294a6_b.jpg即可訪問到該圖片。
第二種方法就是在tomcat的配置檔案中配置一下,其實剛剛在Eclipse中的操作已經自動寫到這個配置檔案中了,配置檔案位置在tomcat目錄/conf/server.xml中,看一下里面會多了一行:
這裡寫圖片描述
這就是剛剛我配置的,它自動寫到這個檔案中了,所以我們也可以直接自己在該配置檔案中寫,就不需要在Eclipse中配置了。

編寫後臺Controller方法

接下來就是重點了,前臺傳過來的檔案,我們在ItemController類中需要進行處理,然後儲存到磁碟中,同時也就對映到了我們配置的虛擬路徑中了,那麼如何接收呢?看下面的程式碼:

@RequestMapping(value="/updateitem",method={RequestMethod.POST,RequestMethod.GET})
public String updateItems(Items items, MultipartFile picture) throws Exception {
    // 把圖片儲存到圖片目錄下
    // 儲存圖片,這個圖片有的時候檔名可能會重複,你儲存多了會把原來的圖片給覆蓋掉,這就不太合適了。
    // 所以為每個檔案生成一個新的檔名
    String picName = UUID.randomUUID().toString();
    // 擷取檔案的副檔名(如.jpg)
    String oriName = picture.getOriginalFilename();
    String extName = oriName.substring(oriName.lastIndexOf("."));
    // 儲存檔案
    picture.transferTo(new File("F:\\temp\\images\\" + picName + extName));

    // 把檔名儲存到資料庫
    items.setPic(picName + extName);
    itemService.updateItem(items);
    return "forward:/item/itemEdit.action";
}

注意:考慮實際情況,儲存圖片時一般不只你一個人儲存圖片,那麼這個圖片有的時候檔名可能會重複,你儲存多了會把原來的圖片給覆蓋掉,這就不太合適了,所以需要使用UUID演算法為每個檔案生成一個新的檔名。
首先來看一下形參,主要有Items和MultipartFile型別的picture,我這裡上傳一張圖片是ItemsCustom類的一個屬性,所以有了這個形參,是為了寫到該類中,SpringMVC檔案上傳的類是MultipartFile,引數名稱picture必須和前臺editItem.jsp頁面的name屬性一致才行。上傳圖片之後的效果類似於:
這裡寫圖片描述
並且圖片的檔名也儲存到了資料庫表中,如下:
這裡寫圖片描述
最後總結一下,我上傳檔案的邏輯可能判斷不嚴謹,如果說要更加嚴謹一點的話, 上傳檔案的邏輯就應是:首先判斷有沒有上傳檔案,如果上傳了,那麼對檔案重新命名然後寫到磁碟中。如果沒有上傳檔案,那麼我應該還是用原來的檔案(圖片)。讀者如果有興趣可以參考下面程式碼:

@RequestMapping(value="/updateitem",method={RequestMethod.POST,RequestMethod.GET})
public String updateItems(Items items, MultipartFile picture) throws Exception {

    // 處理上傳的單個圖片    
    String originalFileName = picture.getOriginalFilename();// 原始名稱
    // 上傳圖片
    if (picture != null && originalFileName != null && originalFileName.length() > 0) {
        // 儲存圖片的物理路徑,實際中是要寫到配置檔案中的,不能在這寫死
        String pic_path = "F:\\temp\\images\\";
        // 新的圖片名稱
        String newFileName = UUID.randomUUID()
                + originalFileName.substring(originalFileName
                        .lastIndexOf("."));     
        File newFile = new File(pic_path + newFileName);//新圖片   
        picture.transferTo(newFile);// 將記憶體中的資料寫入磁碟
        items.setPic(newFileName);// 將新圖片名稱寫到itemsCustom中
    } else {
        //如果使用者沒有選擇圖片就上傳了,還用原來的圖片
        Items temp = itemsService.findItemsById(items.getId());
        items.setPic(temp.getPic());
    }

    // 呼叫service更新商品資訊,頁面需要將商品資訊傳到此方法
    itemService.updateItem(items);
    return "forward:/item/itemEdit.action";
}

到這裡,單個檔案的上傳我就已總結完了。

相關推薦

SpringMVC 框架學習——檔案

這一篇博文主要來總結下SpringMVC中實現檔案上傳的步驟。但這裡我只講單個檔案的上傳。 環境準備 SpringMVC上傳檔案的功能需要兩個jar包的支援,如下: 工程中肯定要匯入以上兩個jar包,主要是CommonsMultipartResolve

yii框架實現檔案

yii框架實現檔案上傳 1.首先yii框架下載uploadFile類 2.html程式碼 <input type="file" class="file" style="display: none" name="business_license" /> 3.j

laravel框架檔案

引用use檔案 控制器引用模型檔案方便呼叫 use App\Info\Info; 模型引用DB檔案 use Illuminate\Support\Facades\DB;   model模型中的程式碼 public function index(){ //

SpringMVC+Postman進行檔案測試

                              SpringMVC+Postman進行檔案上傳測試   一、軟體下載

SpringMVC國際化與檔案(五)

其實SpringMVC中的頁面國際化與上一章的驗證國際化基本一致。 1.對頁面進行國際化 1)首先我們對Spring配置檔案中新增國際化bean配置 <!-- 註冊國際化資訊,必須有id,指定資原始檔名稱,資原始檔在src目錄下 --> <bean id="messa

2018 SpringMVC 單多檔案

一、pom.xml <!--引用springMVC依賴--> <dependency> <groupId>org.springframework</groupId> <artifactId

SpringMVC MultipartFile file檔案及引數接收

轉載自:http://blog.csdn.net/u013771277/article/details/47384817 SpringMvc檔案上傳,首先兩個基礎,1。form表單屬性中加上enctype="multipart/form-data" 強調:form

SpringMVC + MultipartFile實現檔案

jar包別漏掉:commons-fileuploadmaven依賴:<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fil

SSM框架檔案

1.匯入檔案上傳的jar包 2.圖片不是存在資料庫中,而是存在某個目錄下面,然後返回一個路徑(找圖片的路徑)     資料庫只需要儲存該路徑即可。 3.springmvc是支援檔案上傳的     在springMVC中配置檔案上傳,並限制檔案上傳的大小         這裡一定要配置ID,並且ID的

轉:關於我使用spring mvc框架檔案時遇到的問題

昨天嘗試著用spring mvc框架做檔案上傳,犯了挺多不該犯的毛病 問題1: org.springframework.web.util.NestedServletException: Request processing failed; nested exception

springmvc+ajaxSubmit實現檔案

pom.xml        <dependency> <groupId>org.springframework</groupId> <artifact

koa框架實現檔案伺服器

koa有個好用的生成器koa-generator  ,npm install -g koa-generator 安裝之koa2 test_app生成專案,cd test_app進入目錄,npm inst

CodeIgniter框架檔案

這篇文章主要介紹了Codeigniter上傳圖片出現“You did not select a file to upload”的解決辦法,需要的朋友可以參考下Codeigniter自帶的檔案上傳類非常好用,您可以設定指定上傳某型別的檔案及指定大小的檔案。不過在使用的過程中需要注意一些小問題,否則會讓你感到措手

play框架檔案

<span style="font-size:18px;"><!DOCTYPE html> <html> <head> <meta charset

SpringMVC框架實現圖片與下載

1、新建一個Maven webapp專案,引入需要用的夾包,pom.xml檔案的依賴包如下: <dependencies> <!-- 用於生成圖片的縮圖 --> <dependency> <g

webuploader+springmvc實現多檔案(html+js+css原創,後臺程式碼借鑑)

———————-css—————————- /*新增圖片按鈕*/ .add_resume_item { cursor: pointer; } /*遮罩層*/ .zpzs_gray { position: fixed; left: 0; to

java檔案|ssm框架前臺檔案後臺接收原理

第一步: 首先是jsp的form部分程式碼: <form action="up" encType="multipart/form-data" method="post"> <label>選擇檔案</label> <

SpringMVC實現的檔案進度條Bootstrap展示

背景 想做一個帶進度條的檔案上傳,可是搜尋的結果都不是很滿意,最後參考一個實踐了一下,基於SpringMVC實現,前端採用Bootstrap。 整理一下進度條的實現。 效果 先看最後的效果 實現步驟 前提 SpringMVC已經配置

SpringMVC實現單個檔案

/*單個檔案上傳Service程式碼片段 需要注意的是,後臺controller接收的引數不能與物件的屬性名同名,不然就會資料繫結錯誤,如果檔案也是屬於該物件中的屬性,也不可以,因為這個file必須要用multipartFile物件進行接收,如果是多個multi

Springmvc+uploadify實現檔案

   網上看了很多關於檔案上傳的帖子,眾口不一,感覺有點亂,最近正好公司的專案裡用到JQuery的uploadify控制元件做檔案上傳,所以整理下頭緒,搞篇文件出來,供親們分享。    Uploadify控制元件的主要優勢是可以實現批量檔案上傳,並且提供了onSelect(選中檔案)、onUploadS