1. 程式人生 > >SpringMVC:用MultipartFile上傳單個檔案,多個檔案

SpringMVC:用MultipartFile上傳單個檔案,多個檔案

單個檔案上傳開發步驟:

1.新增Apache檔案上傳jar包

首先需要下載兩個apache上傳檔案的jar包
commons-fileupload-1.3.1.jar
commons-io-2.4.jar
具體使用版本,請根據專案進行選擇。

2.配置MultipartResolver處理檔案

SpringMVC 用的是 的MultipartFile來進行檔案上傳 所以我們首先要配置MultipartResolver:用於處理表單中的file。

    <bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
> <property name="maxUploadSize" value="5400000" /> <property name="defaultEncoding" value="UTF-8" /> </bean>

屬性介紹:
maxUploadSize:最大上傳檔案的大小,單位為位元組;
defaultEncoding:請求的編碼格式,預設為iso-8859-1。

3.編寫檔案上傳控制器

@Controller
public class FileUploadController {

    private
static String UPLOAD_DIRECTORY = PropertiesUtil.get("fileupload.directory", ""); @RequestMapping(value = "uploadFile", method = RequestMethod.POST) public ModelAndView uploadFile(@RequestParam("file") MultipartFile file){ // 判斷檔案是否為空 if (!file.isEmpty()) { try { //判斷檔案目錄是否存在,否則自動生成
File directory = new File(UPLOAD_DIRECTORY); if (!directory.exists()){ directory.mkdirs(); } //失敗跳轉檢視 if (file.getSize() > 30000) return new ModelAndView("uploadFail","msg",file.getOriginalFilename()+"超過了指定大小"); // 檔案儲存路徑 String filePath = FilenameUtils.concat(UPLOAD_DIRECTORY, file.getOriginalFilename()); // 轉存檔案 file.transferTo(new File(filePath)); } catch (Exception e) { e.printStackTrace(); } } //成功跳轉檢視 return new ModelAndView("uploadSuccess","msg",file.getOriginalFilename()); } }


說明:
1>使用SpringMVC註解@RequestParam來獲取表單中的file引數內容;
2>通過MultipartFile的transferTo(File dest)這個方法來直接轉存檔案到指定的路徑。

4.書寫前段測試表單

upload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Upload File</title>
</head>
<body>
    <h2>檔案上傳例項</h2>
    <form action="/uploadFile" method="post" enctype="multipart/form-data">
        選擇檔案:<input type="file" name="file">
        <input type="submit" value="提交">
    </form>
</body>
</html>

uploadSuccess.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>檔案上傳成功</title>
</head>
<body>
    <h1>檔案${msg}上傳成功!</h1>
</body>
</html>

uploadFail.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>檔案上傳失敗</title>
</head>
<body>
    <h1>上傳失敗原因:${msg}</h1>
</body>
</html>


  注意要在form標籤中加上enctype=”multipart/form-data”表示該表單是要處理檔案的,這是最基本的東西,很多人會忘記然而當上傳出錯後則去找程式的錯誤,卻忘了這一點

5.執行單個檔案上傳結果

成功:
上傳成功
失敗:
上傳失敗

多個檔案上傳開發步驟:

步驟1,2都是相同的,只是步驟3,4有些許不同。

3.1多個檔案上傳控制器

    /**
     * 多個檔案上傳
     * @param files
     * @return
     */
    @RequestMapping(value = "uploadFiles", method = RequestMethod.POST)
    public ModelAndView uploadFile(@RequestParam("files") MultipartFile[] files){
        //判斷file陣列不能為空並且長度大於0
        if (files != null && files.length > 0) {
            //迴圈獲取file陣列中得檔案
            for (int i = 0; i < files.length; i++) {
                MultipartFile file = files[i];

                //儲存檔案
                String filePath = FilenameUtils.concat(UPLOAD_DIRECTORY, file.getOriginalFilename());
                // 轉存檔案
                try {
                    file.transferTo(new File(filePath));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        //跳轉檢視
        return new ModelAndView("uploadSuccess","msg",files.length+"個檔案");
    }

4.1多個檔案上傳表單

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Upload File</title>
</head>
<body>
    <h2>多個檔案上傳例項</h2>
    <form action="/uploadFiles" method="post" enctype="multipart/form-data">
        <p> 選擇檔案:<input type="file" name="files">
        <p> 選擇檔案:<input type="file" name="files">
        <p> 選擇檔案:<input type="file" name="files">
        <input type="submit" value="提交">
    </form>
</body>
</html>


說明:
  前端表單,多個檔案組使用同一個name名稱:files,後臺控制器使用@RequestParam(“files”) MultipartFile[] files 陣列來接收。

5.1執行多個檔案上傳結果

上傳:
這裡寫圖片描述
結果:
這裡寫圖片描述

擴充:

1>MultipartFile常用方法

列印方法結果:
1>檔案型別值,MultipartFile.getContentType():image/jpeg
2>表單中檔案元件對應name值,MultipartFile.getName():file
3>檔案原始名稱包括字尾名,MultipartFile.getOriginalFilename():IMEI_20171204.jpg
4>檔案大小單位為k,MultipartFile.getSize():27128
5>檔案是否為空,MultipartFile.isEmpty():false

2>Apache檔案相關jar包常用方法

1>FilenameUtils.concat(basePath, fullFileName):用於拼接目錄和檔名為檔案全路徑,且會根據系統對應使用相應的分隔符
2>FileUtils.copyURLToFile(URL source, File destination, int connectionTimeout, int readTimeout):
從指定的url下載檔案,儲存到destination為準;同時指定連線超時時長,讀取檔案超時時長。

相關推薦

SpringMVC:MultipartFile傳單檔案,檔案

單個檔案上傳開發步驟: 1.新增Apache檔案上傳jar包 首先需要下載兩個apache上傳檔案的jar包 commons-fileupload-1.3.1.jar commons-io-2.4.jar 具體使用版本,請根據專案進行選擇。

SpringMVCMultipartFile檔案及檔名中文亂碼

前言 過程 參考 前言 近日,專案中有個需求-android端上傳一個商品多張圖片,需要java後臺。以前後臺使用了struts,現在是springmvc。想著很多東西是不是能

傳單檔案

一、匯入包<link rel="styleSheet" type="text/css"href="<c:url value='/fileupload/fileupload.css'/>" /><script type="text/javascri

SpringMVC使用MultipartFile檔案

1. MultipartFile基本介紹 MultipartFile是springmvc官方提供的一個比較完善的檔案上傳元件,MultipartFile是一個組織介面它的實現類有 org.springframework.web.multipart.commons.CommonsMultipartFi

Plupload 傳詳細講解,Plupload 實例傳,Plupload傳按鈕--推薦使用

.html 目前 clas 路徑 arc 我們 參考 等等 選擇 今天幫朋友解決 Plupload 上傳的問題,查了很多資料,資料還是挺全的,但是有點零零散散的,故整理好,合並發出來。 本教程包括: Plupload 上傳詳細講。 Plupload 多實例

C++獲取電腦連接的攝像頭名稱與編號

return 運行 cat coin 編號 ase system void bstr #include<iostream>#include "strmif.h"#include <initguid.h>#include<vector>#i

電腦同時裝了版本EXCEL如何默認打開excel2013版本呢【已解決】

water term 入門到 image cto roc excel2013 ref 時裝 有的朋友電腦上同時裝了Office2010和2013, 表格文件已經選了默認用2013打開,但是每一次打開文件還是2010的,怎麽才能設置用2013打開呢? 1、卸載OFFICE20

python 在不同CPU同時運行程序

www. self. sel random com .com program http uri 出處/From https://www.quora.com/If-you-run-Python-under-a-dual-core-CPU-then-can-you-run-tw

不用再打渠道包了,它就可以快速統計渠道!

使用Shareinstall的免打包渠道統計技術,可以實現只上傳一個APK安裝包,以直接向各個渠道分配渠道連結(二維碼)的方式實現多渠道統計,完全不用再麻煩技術的同事幫忙打包,直接由渠道業務管理的同事操作生成渠道連結即可。 稍微介紹一下,Shareinstall其實是一個APP的推廣輔助

在同一臺機器實現主從複製,mysql(windows)

最近在自學,看到了mysql的主從複製,覺得挺有意思的,就研究了下.無奈試了多種方法均以失敗告終,最後只好在同一臺機器上安裝多個mysql.試試主從複製. 一共試了三種方式,目前只成功了一種. 1.用雲伺服器坐從伺服器,本地的電腦做主伺服器

linux grep 查找單個或字符串(關鍵字)

grep 關鍵字 inux rep tmp php lin log 成功 1.單個 cat /tmp/php.log | grep "成功" 所有的成功都會被查詢出來。 2.多個,並列查詢 cat /tmp/php.log | grep "推薦

android 利用OKhttp 傳單張或者張圖片

沒有廢話,程式碼如下  if (path.size() > 0) {//path存放imgurl的集合 for (int i = 0; i < path.size(); i++) { OkHttpClient client = new OkHt

Linux後臺同時執行程式

因為需要進行神經網路的引數搜尋,需要在伺服器上同時執行多個程式。 編寫測試程式: vim a.py vim b.py 查閱到以下方法: 1、 vim c.py 結果 這是順序執行的,不是並行 2、 vim total 許可權改為可執行chmod +x

mybatis的配置檔案中使用兩foreach進行集合遍歷的問題

<select id="selectTrafficEventIngByType" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/> f

xpath選擇兄弟節點、返回一級和選擇屬性

選擇兄弟節點 選擇前N位的div標籤 preceding-sibling::div[N] 選擇後N位的div標籤 following-sibling::div[N] 選擇上一級 ../ 結合使用 //td[text()='xxx']/../fo

Okhttp 傳單張、張圖片,下載工具類

以下是對okhttp的封裝,希望大家不要見笑,很好用的 import android.content.Context; import android.os.Environment; import android.support.annotation.NonNull; import a

如何在一臺電腦執行兩Tomcat

1)在系統環境變數中增加JAVA_HOME2=C:\Program Files\Java\jdk1.7.0_17 (同時,由於解決了其手動不能啟動的問題,故也順便將其解決方法中設定的路徑改為: 編輯startup.bat檔案,新增set JAVA_HOME2=C:\Program Files\Java\j

一個form表單中,傳和接收相同的name欄位引數

一般我們在同一個表單中,都會提交不同的name欄位。可是,我遇到了提交相同欄位的情況,例子如下: <form action="test_receive.php" method="post"> <div> <

在一臺電腦執行兩tomcat

修改其中一個tomcat中的某些引數,為了避免啟動tomcat時出現衝突,編輯bin/startup.bat, 在檔案第一行新增如下兩行 SET JAVA_HOME=C:\websoft\jdk1.6.0_33 (JDK所在路徑) SET CATALINA_HOME=C:\test\tomcat222222

Plupload 傳詳細講解,Plupload 例項傳,Plupload傳按鈕

  Plupload  上傳成功獲取返回值. DEMO:<!DOCTYPE html><html><head><metacharset="UTF-8"><title>Plupload使用指南</title><!-- 首先需要引入pl