MVC單文件與多文件上傳學習筆記

MVC單文件與多文件上傳學習筆記(2019-11-04):

pom文件依賴:

	<dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>1.3.2</version>
    </dependency>
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.2.1</version>
    </dependency>

配置文件(springmvc.xml):

<!-- 配置多媒體解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 設定文件上傳的最大值100MB,100*1024*1024 -->
        <property name="maxUploadSize" value="104857600"></property>
    </bean>

單文件上傳:

頁面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>個人文件上傳test網站</title>
</head>
<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
<body>
    <!--必須是表單包起來  有name屬性 而且name屬性必須和後端接收的參數名一樣-->
    <form id="inputForm">
        <input type="file" name="updateUrl" onchange="updatefile()">
    </form>
    <div>
        <table>
            <tr>
                <td id="tset">
                    <!--回顯上傳後的連接-->
                </td>
            </tr>
        </table>
    </div>
</body>
    
    
<script type="text/javascript">
    function updatefile() {
        var formData = new FormData($("#inputForm")[0]);
        $.ajax({
            url: "/test/updatefile",
            async: false,
            type: "POST",
            data: formData,
            cache: false,
            contentType: false,
            processData: false,
            success: function (updateVersionFile) {
                 //插入個 a標籤 回顯示地址
                $("#tset").html("<a href=\""+updateVersionFile+"\">點擊查看</a>");
            }
        });
    }
</script>
</html>

後端代碼:

	/**
     * 單個文件上傳
     * @param multipartFile的名稱 如果不使用註解 必須得和頁面的name一樣
     * @return
     */
 @PostMapping("/updatefile")
    public String getlist(@RequestParam(value = "updateUrl", required = false) MultipartFile multipartFile){
        InputStream inputStream=null;
        try {
            inputStream = multipartFile.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //自己進行上傳雲服務器獲取地址後返回
        return url;
    }

單獨使用<input type="file" name="updateUrl" onchange="updatefile()"> 上傳方式不用表單

function updatefile() {
        var formData = new FormData();
        //jquery獲取選擇文件選項轉換成js對象
        var file = $("#updateUrl")[0];
        //添加進去formData  updateUrl要和後端接收名一樣
        formData.append("updateUrl",file.files[0]);
        $.ajax({
            url: "/updatefile",
            async: false,
            type: "POST",
            data: formData,
            cache: false,
            contentType: false,
            processData: false,
            success: function (updateVersionFile) {
                //插入個 a標籤 回顯示地址
                $("#tset").html("<a href=\""+updateVersionFile+"\">點擊查看</a>");
            }
        });
    }

多文件上傳:

頁面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>個人文件上傳test網站2</title>
</head>
<script type="text/javascript" src="js/jquery-3.3.1.min.js"></script>
<body>
        <!--3個文件框 name屬性必須相同  id不同用來取值-->
        <input type="file" name="updateUrl" id="updateUrl1">
        <input type="file" name="updateUrl" id="updateUrl2">
        <input type="file" name="updateUrl" id="updateUrl3">
        <button onclick="updatefile()">點擊多文件上傳</button>
</body>
<script type="text/javascript">

    function updatefile() {
        //根據不同id 取出每一個文件的值 添加進formData表單格式相同
        var formData =  new FormData();
        //但是key 必須是相同
        formData.append("updateUrl",$("#updateUrl1")[0].files[0])
        formData.append("updateUrl",$("#updateUrl2")[0].files[0])
        formData.append("updateUrl",$("#updateUrl3")[0].files[0])
        $.ajax({
            url: "/updatefile2",
            async: false,
            type: "POST",
            data: formData,
            cache: false,
            contentType: false,
            processData: false,
            success: function (result) {
                alert("上傳成功!"+result);
            }
        });
    }
</script>
</html>

後端使用數組接收:

	/**
     * 多個文件上傳
     * @param multipartFile[] 使用數組接收 名字和formData的key一樣 即可
     * @return
     * @throws IOException
     */
    @PostMapping("/updatefile2")
    public String multiFile(@RequestParam(value = "updateUrl", required = false) MultipartFile[] multipartFile) throws IOException {
        for (MultipartFile file : multipartFile) {
            System.out.println(file.getSize());
            System.out.println(file.getOriginalFilename());
            System.out.println(file.getInputStream());
        }
        return "success";
    }
    /*輸出結果:
    7685829
    Coffee_Android-v1.9-360.apk
    java.io.FileInputStream@7d9e7ef0
    17369219
    EWater-v2.0.1.0-release.apk
    java.io.FileInputStream@443fe880
    14672727
    test.apk
    java.io.FileInputStream@79707c66*/
頁面也可以使用表單提交:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!--3個文件框 name屬性必須相同 表單屬性必須 enctype="multipart/form-data"-->
    <form action="${pageContext.request.contextPath }/multifile"
        method="post" enctype="multipart/form-data">
        選擇文件1:<input type="file" name="myfile"><br>
        文件描述1:<input type="text" name="description"><br />
        選擇文件2:<input type="file" name="myfile"><br>
        文件描述2:<input type="text" name="description"><br />
        選擇文件3:<input type="file" name="myfile"><br>
        文件描述3:<input type="text" name="description"><br />
        <input type="submit" value="提交">
    </form>
</body>
</html>


發佈了29 篇原創文章 · 獲贊 3 · 訪問量 1620
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章