整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          SpringBoot系列教程-Web開發04之實現文

          SpringBoot系列教程-Web開發04之實現文件上傳

          . 概述

          文件上傳是開發中比較常見的功能之一.但是SpringBoot并沒有提供特別的文件上傳技術,而是依賴于SpringMVC的文件上傳技術.在SpringBoot中集成了SpringMVC的很多常用功能,也包含了文件上傳部分,實現起來沒有太多的區別.

          本章節我們就講解如何在Spring Boot中實現文件文件上傳.

          1. MultipartFile簡介

          在SpringMVC時代,提供了MultipartFile這個封裝類,它包含了文件的二進制流和文件相關屬性(文件名、大小等),而在Spring Boot中也是使用此封裝類進行文件上傳的.

          MultipartFile是個接口,它的實現類有CommonsMultipartFile和StandardMultipartFile,這里簡單說明:

          1??. CommonsMultipartFile: 是基于apache fileupload的解析;

          2??. StandardMultipartFile: 是基于j2ee自帶的文件上傳進行解析,也就是使用Servlet3.0提供的javax.servlet.http.Part上傳方式.

          我們在正常使用MultipartFile時,無需關心底層是以哪種方式進行文件上傳處理的,SpringMVC會給我們做相應的轉換.

          byte[] getBytes(): 獲取文件數據;
          String getContentType(): 獲取文件MIME類型,如application/pdf、image/pdf等;
          InputStream getInputStream(): 獲取文件流;
          String getOriginalFileName(): 獲取上傳文件的原名稱;
          long getSize(): 獲取文件的字節大小,單位為byte;
          boolean isEmpty(): 是否上傳的文件是否為空;
          void transferTo(File dest): 將上傳的文件保存到目標文件中

          2. 注意:

          要想實現文件上傳,必須將表單的method設置為post,并將enctype設置為multipart/form-data.只有這樣,瀏覽器才會把用戶所選擇文件的二進制數據發送給服務器.SpringMVC在文件上傳時,會將上傳的文件映射為MultipartFile對象,并對MultipartFile對象進行文件的解析和保存.

          二. 使用SpringBoot上傳單個文件

          1. 在原有項目中創建一個新的module?

          2. 改造pom.xml文件,添加相關依賴包

          <dependencies>
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
          
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-thymeleaf</artifactId>
              </dependency>
          
              <!--為了解決thymeleaf模板中,對html標簽要求太嚴格的問題!-->
              <dependency>
                  <groupId>net.sourceforge.nekohtml</groupId>
                  <artifactId>nekohtml</artifactId>
                  <version>1.9.22</version>
              </dependency>
          
              <!--簡化bean的代碼-->
              <dependency>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
              </dependency>
          </dependencies>

          3. 編寫文件上傳頁面picUpload.html

          在resource/templates目錄下,創建一個文件上傳頁面。

          <!DOCTYPE HTML>
          <html>
          <head>
              <title>pictureUploading</title>
              <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
          </head>
          <body>
          <form enctype="multipart/form-data" method="post" action="/upload">
              文件: <input type="file" name="fileUpload"/>
              <input type="submit" value="上傳"/>
          </form>
          </body>
          </html>

          4. 配置application.properties

          在resources目錄下,創建一個application.properties配置文件,并設置相關配置屬性。

          # Template mode to be applied to templates. See also StandardTemplateModeHandlers.
          spring.thymeleaf.mode=LEGACYHTML5
          
          spring.servlet.multipart.enabled=true
          spring.servlet.multipart.max-file-size=10MB
          spring.servlet.multipart.max-request-size=10MB
          
          #文件上傳目錄(注意Linux和Windows上的目錄結構不同)
          #uploadFolder=/root/upload/
          #特別要注意此位置
          uploadFolder=E:/upload/

          5. 創建信息提示類Message

          創建項目包,在包里創建一個JavaBean,用于對外展示信息。

          package com.yyg.boot.domain;
          
          import lombok.AllArgsConstructor;
          import lombok.Data;
          import lombok.NoArgsConstructor;
          
          /**
           * 采用lombok簡化bean
           */
          @Data
          @NoArgsConstructor
          @AllArgsConstructor
          public class Message {
          
              /**
               *0表示成功,-1表示失敗
               */
              int status;
          
              /**
               * 向前端返回的內容
               */
              String massage;
          
          }

          6. 創建文件上傳的UploadController類

          package com.syc.boot.web;
          
          import com.syc.boot.domain.Message;
          import org.springframework.beans.factory.annotation.Value;
          import org.springframework.stereotype.Controller;
          import org.springframework.web.bind.annotation.PostMapping;
          import org.springframework.web.bind.annotation.RequestMapping;
          import org.springframework.web.bind.annotation.ResponseBody;
          import org.springframework.web.multipart.MultipartFile;
          
          import java.io.File;
          import java.util.UUID;
          
          /**
           * 實現文件上傳的控制器
           */
          @Controller
          public class UploadController {
          
              @Value("${uploadFolder}")
              private String  fileDir;
          
              @RequestMapping("/picUpload")
              public String picUpload(){
                  //跳轉到picUpload.html
                  return "picUpload";
              }
          
              @ResponseBody
              @PostMapping("/upload")
              public Object upload(MultipartFile fileUpload){
                  //獲取文件名
                  String fileName=fileUpload.getOriginalFilename();
                  //獲取文件后綴名
                  String suffixName=fileName.substring(fileName.lastIndexOf("."));
                  //重新生成文件名
                  fileName=UUID.randomUUID()+suffixName;
                  //指定本地文件夾存儲圖片
                  try {
          
                      System.out.println("------->>"+fileDir);
                      File dir=new File(fileDir);
                      if (!dir.exists()) {
                          dir.mkdirs();
                      }
                      File upload_file=new File(fileDir + fileName);
                      fileUpload.transferTo(upload_file);
                      return new Message(0,"success to upload");
                  } catch (Exception e) {
                      e.printStackTrace();
                      return new Message(-1,"fail to upload");
                  }
              }
          }

          7. 應用程序入口類

          package com.syc.boot;
          
          import org.springframework.boot.SpringApplication;
          import org.springframework.boot.autoconfigure.SpringBootApplication;
          
          @SpringBootApplication
          public class UploadWebApplication {
          
              public static void main(String[] args) {
                  SpringApplication.run(UploadWebApplication.class, args);
              }
          }

          8. 運行程序,實現文件上傳

          我們接下來啟動程序,訪問文件上傳界面,選擇文件進行上傳,可以看到如下效果,說明文件上傳成功。

          9. 整個工程目錄結構

          三. 使用SpringBoot上傳多個文件

          我們有時候需要同時上傳多個文件,那么如何實現呢?

          1. 創建多文件上傳的html頁面

          我們首先創建一個多文件上傳的html頁面multiUpload.html。

          <!DOCTYPE html>
          <html xmlns:th="http://www.thymeleaf.org">
          <head>
              <title>多文件上傳</title>
              <meta charset="utf-8"/>
              <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
              <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/>
          </head>
          
          <body>
          <div>
              <div>
                  <div>
                      <h3>多個文件上傳</h3>
                  </div>
                  <div>
                      <form  method="post" enctype="multipart/form-data" th:action="@{/uploadMultifile}">
                          <div>
                              <label for="attachment1">文件上傳: </label>
                              <div>
                                  <input type="file"  name="attachment" id="attachment1" placeholder="請選擇郵件附件"/>
                              </div>
                          </div>
                          <div>
                              <label for="attachment2">文件上傳: </label>
                              <div class="col-sm-5">
                                  <input type="file"  name="attachment" id="attachment2" placeholder="請選擇郵件附件"/>
                              </div>
                          </div>
                          <div>
                              <label for="attachment3">文件上傳: </label>
                              <div>
                                  <input type="file" name="attachment" id="attachment3" placeholder="請選擇郵件附件"/>
                              </div>
                          </div>
          
                          <div>
                              <div>
                                  <button type="submit">上 傳</button>
                              </div>
                          </div>
                      </form>
                  </div>
              </div>
          </div>
          </body>
          
          </html>

          2. 創建一個多文件上傳的方法

          要實現多文件上傳,可以在上面的controller中添加一個新的接口方法.

          @RequestMapping("/multiUpload")
              public String multiUpload(){
                  //跳轉到multiUpload.html
                  return "multiUpload";
              }
          
          @RequestMapping(value="/uploadMultifile", method=RequestMethod.POST)
              @ResponseBody
              public Object uploadMultiFile(@RequestParam("attachment") MultipartFile[] fileUpload) {
                  
                  try {
                      for (int i=0;i<fileUpload.length;i++){
                          //獲取文件名
                          String fileName=fileUpload[i].getOriginalFilename();
                          //指定本地文件夾存儲圖片
                          File dir=new File(fileDir);
                          if (!dir.exists()) {
                              dir.mkdirs();
                          }
                          if (fileUpload[i]!=null){
                              File upload_file=new File(fileDir + fileName);
                              fileUpload[i].transferTo(upload_file);
                          }
                      }
                      return new Message(0,"success to upload");
                  } catch (Exception e) {
                      e.printStackTrace();
                      return new Message(-1,"fail to upload");
                  }
                  
              }

          3. 多文件上傳驗證

          我們最終實現了在Spring Boot中的多文件上傳功能.

          四. 總結下文件上傳的要點:

          • 1??. 表單method設置為post,并將enctype設置為 multipart/form-data;
          • 2??. 文件映射為MultipartFile對象進行解析;
          • 3??. 上傳文件大小spring.http.multipart.max-file-size限制.


          者:藍色的秋風

          轉發鏈接:https://mp.weixin.qq.com/s/cruL9JGZNZQFrMSrzJJWiQ

          端上傳文件或者上傳文件夾,HTML+AJAX實現上傳大文件方案,h5批量下載文件,HTTP+斷點續傳,前端處理大文件/視頻分片上傳,斷點續傳,VUE—實現文件上傳(多文件),圖片上傳,VUE 項目大文件上傳下載解決方案,VUE將前端的JSON文件上傳到后臺對應目錄,

          JAVASCRIPT之分片上傳,斷點續傳的實際項目實現詳解,大文件上傳如何做斷點續傳?全端+后端結合開發,VUE實現文件上傳(單文件、多文件、分片上傳),JS中實現文件上傳下載的三種解決方案(推薦),JS實現大文件上傳——分片上傳方法,完美解決WEB無法上傳大文件方法,HTML大文件上傳源碼,

          WEBUPLOAD組件實現文件上傳功能和下載功能,js大文件上傳下載解決方案,vue大文件上傳下載解決方案

          asp.net大文件上傳下載解決方案,.net大文件上傳下載解決方案,webform大文件上傳下載解決方案,jsp大文件上傳下載解決方案,java大文件上傳下載解決方案,JAVASCRIPT 大文件上傳下載切片解決方案,JAVASCRIPT 大文件上傳下載切割解決方案,JAVASCRIPT 大文件上傳下載分割解決方案,JAVASCRIPT 大文件上傳下載分塊解決方案,JAVASCRIPT 大文件上傳下載分片解決方案,web大文件上傳下載解決方案,

          網頁大文件上傳下載解決方案,前端大文件上傳下載解決方案,html5大文件上傳下載解決方案,JAVASCRIPT 大文件上傳下載解決方案,支持

          之前在網上也找過相關的資料,論壇上也有網友交流過,但是基本上都不太令人滿意,與公司這邊的項目需求相差太遠。文章的話基本上大部分都是重復的內容,幾乎都是講的如何用HTML5來做,但是提到的也不多。

          HTML5,VUE2,VUE3,React,javascript等常用前端UI框架,JS框架,網上找的方案大多數都只是一些代碼片段,沒有提供完整的前后端代碼。

          原理到是不復雜。上傳位置不能傳錯。用戶主要強調穩定性和兼容性。

          之前在網上也搜過相關的資料。論壇里面也有一些網絡交流,但是都不太令人滿意。公司這邊實際上需要的是一成熟的商業解決方案,需要能夠提供成功案例,公司客戶都是國企。

          跟項目經理溝通過,這塊網上搜到的文章能用的幾乎沒有。實際上客戶那邊比較在乎兩點。

          之前項目上面用Flash比較多一點,現在基本上都是HTML5,斷點續傳除了頁面級以外最好還能夠提供離線支持。

          支持IE,Chrome和信創國產化環境,比如銀河麒麟,統信UOS,龍芯,

          支持分片,分塊,分段,切片,分割上傳。能夠突破chrome每域名的5個TCP連接限制,能夠突破chrome重啟,關閉瀏覽器續傳的限制。

          支持10G,20G,50G,100G文件上傳和續傳,支持秒傳,支持文件夾上傳,重復文件檢測,重復文件校驗

          支持文件下載,批量下載,下載斷點續傳,加密下載,端到端加密,加密算法支持國密SM4,多線程下載

          支持在服務端保存文件夾層級結構,支持將文件夾層級結構信息保存到數據庫中,支持下載時能夠將文件夾層級結構下載下來,支持下載文件夾,下載文件夾支持斷點續傳,

          支持加密傳輸,包括加密上傳,加密下載,加密算法支持國密SM4,

          支持云對象存儲,比如華為云,阿里云,騰訊云,七牛云,AWS,MinIO,FastDFS,

          提供手機,QQ,微信,郵箱等聯系方式,提供7*24小時技術支持,提供長期技術支持和維護服務,提供遠程1對1技術指導,提供二次開發指導,提供文檔教程,提供視頻教程。

          視頻教程:

          https://www.ixigua.com/7226245960341389859

          1.下載示例

          https://gitee.com/xproer/up6-vue-cli



          將up6組件復制到項目中

          示例中已經包含此目錄



          1.引入up6組件



          2.配置接口地址

          接口地址分別對應:文件初始化,文件數據上傳,文件進度,文件上傳完畢,文件刪除,文件夾初始化,文件夾刪除,文件列表

          參考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de



          3.處理事件



          啟動測試



          啟動成功



          效果



          數據庫



          源碼工程文檔:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

          源碼報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl

          OEM版報價單:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a

          控件源碼下載:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
          授權碼生成器:https://drive.weixin.qq.com/s?k=ACoAYgezAAwTIcFph1


          主站蜘蛛池模板: 视频一区二区精品的福利| 蜜桃传媒视频麻豆第一区| 日本大香伊一区二区三区| 91video国产一区| 国产福利电影一区二区三区,亚洲国模精品一区| 亚洲国产成人久久综合一区77| 蜜臀AV无码一区二区三区| 性无码一区二区三区在线观看| 中文无码AV一区二区三区| 精品一区二区三区视频在线观看| 蜜臀AV无码一区二区三区| 国产福利一区二区三区在线视频| 国产免费一区二区三区不卡| 久久99精品免费一区二区| 福利一区在线视频| 日本一区二区三区免费高清在线| 亚洲一区二区三区丝袜| 51视频国产精品一区二区| 亚洲香蕉久久一区二区三区四区 | 日韩精品一区二区三区中文字幕 | 亚州国产AV一区二区三区伊在| 一本大道在线无码一区| 一区二区三区在线观看视频| 色欲AV蜜臀一区二区三区| 国产一区在线观看免费| 久久福利一区二区| 国模无码视频一区二区三区| 一区三区三区不卡| 亚洲一区二区三区丝袜| 熟女大屁股白浆一区二区| 亚洲一区二区三区国产精华液| 无码精品人妻一区二区三区AV| 亚洲国产综合无码一区| 国产在线精品一区二区| 国产一区二区三区小向美奈子| 亚洲码一区二区三区| 日本韩国一区二区三区| 国产SUV精品一区二区88L| 日韩熟女精品一区二区三区| 国产高清在线精品一区二区| 国产色综合一区二区三区|