1. 程式人生 > >SpringBoot進階之檔案上傳(單檔案上傳/多檔案上傳)

SpringBoot進階之檔案上傳(單檔案上傳/多檔案上傳)

1.單檔案上傳

    private String uploadPath="D:\\tomcat\\apache-tomcat-7.0.81-windows-x64\\apache-tomcat-7.0.81\\webapps\\img\\";

    private String URL="http://127.0.0.1:8880/img/";
    /**
     * 單個檔案上傳   檔案上傳成功後返回檔案的訪問路徑
     * @param file
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    public Msg upload(@RequestParam("file")MultipartFile file) {
        if(!file.isEmpty()) {
            File fil=new File(uploadPath+file.getOriginalFilename());
            try {
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fil));
                out.write(file.getBytes());
                out.flush();
                out.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return ResultUtil.error(200, "檔案上傳失敗{}" + e.getMessage());
            } catch (IOException e) {
                e.printStackTrace();
                return ResultUtil.error(200, "檔案上傳失敗{}" + e.getMessage());
            }
            return ResultUtil.success(URL+fil.getName());       //返回上傳檔案的訪問路徑   getAbsolutePath()返回檔案上傳的絕對路徑
        }else {
            return ResultUtil.error(201, "檔案上傳失敗,檔案為空");
        }
    }

postman請求效果圖:


2.多檔案上傳
    private String uploadPath="D:\\tomcat\\apache-tomcat-7.0.81-windows-x64\\apache-tomcat-7.0.81\\webapps\\img\\";

    private String URL="http://127.0.0.1:8880/img/";
    /**
     * 多檔案上傳 並返回各個檔案的訪問路徑
     * @param files
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/upload/batch", method = RequestMethod.POST)
    public Msg batchUpload(@RequestParam("files")MultipartFile[] files) {

        String uploadedFileName = Arrays.stream(files).map(x -> x.getOriginalFilename())
                .filter(x -> !StringUtils.isEmpty(x)).collect(Collectors.joining(" , "));
        if (StringUtils.isEmpty(uploadedFileName)) {
            return ResultUtil.error(201,"檔案上傳失敗,檔案為空");
        }
        List<String> path=new ArrayList<>();
        try {
           path=  saveUploadedFiles(Arrays.asList(files));
        } catch (IOException e) {
            return ResultUtil.error(201,"檔案上傳異常"+e.getMessage());
        }
        return ResultUtil.success(path);
    }


    private  List<String> saveUploadedFiles(List<MultipartFile> files) throws IOException {
       List<String> paths=new ArrayList<>();
        for (MultipartFile file : files) {
            if (file.isEmpty()) {
                continue;
            }
            byte[] bytes = file.getBytes();
            Path path = Paths.get(uploadPath + file.getOriginalFilename());
            paths.add(URL + file.getOriginalFilename());            //儲存上傳檔案的訪問路徑
            Files.write(path, bytes);
        }
      return paths;
    }


請求效果圖:


附:

Java 8 中的 Stream API 詳解:Stream詳解


相關推薦

SpringBoot統一異常處理含原始碼

淺談異常處理 在J2EE專案的開發中,不管是對底層的資料庫操作過程,還是業務層的處理過程,還是控制層的處理過程,都不可避免會遇到各種可預知的、不可預知的異常需要處理。每個過程都單獨處理異常,系統的程式碼耦合度高,工作量大且不好統一,維護的工作量也很大。

SpringBoot檔案檔案/檔案

1.單檔案上傳 private String uploadPath="D:\\tomcat\\apache-tomcat-7.0.81-windows-x64\\apache-tomcat-7

SpringBootweb2~使用AOP處理請求日誌

作為Spring兩大核心原理AOP和IOC,什麼是AOP?     eg:下雨了我打開了傘,java和c程式設計師程式設計的區別   AOP利用的是橫切的技術,將面向物件構建的龐大的類的體系進行水平的切割,並且會將影響到多個類的公共行為封

SpringBoot訪問資料庫含原始碼

本文介紹在Spring Boot基礎下配置資料來源和通過JdbcTemplate編寫資料訪問的示例。 簡單介紹一下 @Controller:修飾class,用來建立處理http請求的物件 @RestController:Spring4之後加入的註解,原來在

SpringBootweb3~統一異常處理

規定返回結果Result類     我們為了解決邏輯在一個地方處理,另一個地方不需要再接收它返回的資訊,所以我們引入了異常。預設的Exception只接受message的欄位,但我們通常還有code, 所以自定義一個Exception如下:

SpringBootWeb

一.表單驗證 1.為要校驗的物件新增對應的校驗註解 使用@Min(value=18,message="未成年少女金之入內")標記對應類中的屬性。註解表示age最小值為18,錯誤提示為:未成年少女禁止入內 Girl類例項程式碼 package com.st

webpack路三、實戰一,使用ES6、ts、Flow、SCSS

一、使用新語言來開發專案 1、使用ES6語言 通常我們需要將採用ES6編寫的程式碼轉換成目前已經支援良好的ES5程式碼,包含如下: 將新的ES6語法用ES5實現,例如ES6的class語法用ES5的prototype實現; 為新的API注入polyfill,例

SpringBootAOP統一處理http請求日誌

相關注解 1、@Aspect  放在類上面,把該類作為一個切面 2、@Pointcut  放在方法上面,定義一個可被別的方法引用的切入點表示式 3、@Before  放在方法上面,前置通知   方法執行前執行 4、@After   放在方法上面     後置最終通知    

SpringBootJPA實現分頁、排序

---------------repository類程式碼------------ public interface GirlRepository extends JpaRepository<G

Android自定義View1實現可換行的TextView

         今天來一起學習一下最簡單的自定義view,自己動手寫一個MyTextView,當然不會像系統的TextView那麼複雜,只是實現一下TextView的簡單功能,包括分行顯示及自定義屬性的處理,主要目的是介紹自定義view的實現的基本思路和需要掌握的一些基礎知

webpack路二、配置

Entry:配置模組的入口。 Output:配置如何輸出最終想要的程式碼。 Module:配置處理模組的規則。 Resolve:配置尋找模組的規則。 Plugins:配置擴充套件外掛 DevServer:配置DevServer。 其他配置項:其他零散的配置項。

SpringBoot單元測試

1.測試方法 service程式碼 public Girl findOne(Integer id){ return girlRepository.findOne(id); //通過id查詢使用者資訊 } serviceTest程式碼 @RunWith(Sprin

資料結構-單鏈表快慢指標原理快速查詢法

面試題:快速找到未知長度單鏈表的中間節點?這個問題的解決方法分為普通方法和高階方法。1.普通方法即我們大家都能一下子想到的,首先遍歷一遍獲取總長度L,然後再次遍歷迴圈至L/2即可;時間複雜度為:O(L+L/2)=O(3/2L)程式碼簡單實現:typedef struct {

SpringBoot教程(六十一)intellij idea project下建個module搭建架構(下)

在上一篇文章《SpringBoot進階教程(六十)intellij idea project下建多個module(上)》中,我們已經介紹了在intellij idea中建立project之後再分化多個module,今天再大致介紹介紹各個module之間詳細工作的細分。 如果是不考慮細分多個module

Java學習第十三天檔案與下載、JavaMail郵件開發

一、檔案上傳與下載 1、檔案上傳 案例:登錄檔單/儲存商品等相關模組! 頭像 / 商品圖片(資料庫:儲存圖片路徑 / 圖片儲存到伺服器中指定的目錄) 2、檔案上傳要點 ① 表單提交方式:post ② 表單中有檔案上傳的表單項: <input type=”file” />

Java學習路史吐血整理Java技術書從入門到最全50+本書籍推薦珍藏版)

前言: 技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的地方做個記

性能測試七:jmeter文件下載、定時器

同步 ner 功能 get 普通 web-inf bubuko 限制 tomcat-7 一、上傳下載 上傳: 1,POST請求,勾選 use …for post 2,同請求一起發送文件裏,填寫文件名稱,參數名稱 3,MIME類型: application/octet-str

Hadoop3——Hadoop檔案系統

Hadoop有一個抽象的檔案系統概念,HDFS只是其中的一個實現。Java抽象類org.apache.hadoop.fs.FileSystem定義了Hadoop中的一個檔案系統介面,並且該抽象類有幾個具體實現。 Hadoop檔案系統 檔案系統 URI方案 Ja

Esp8266路17 esp8266自研的快速電開關五次 (開-關為一次) ,無需按鍵觸發則8266進去一鍵配網模式。附帶Demo

本系列部落格學習由非官方人員 半顆心臟 潛心所力所寫,僅僅做個人技術交流分享,不做任何商業用途。如有不對之處,請留言,本人及時更改。 很多人怎麼聯絡我一起學習進步,下面打個小小公告:

Python爬蟲url去重可用於檔案去重

主要介紹幾個常用和目前瞭解的,當然還有其他方法,這裡只說目前本人自己能實現的幾種方法的基本思想:基於Hash演算法的儲存。對每一個給定的URL,都是用一個已經建立好的Hash函式,對映到某個實體地址上。當需要進行檢測URL是否重複的時候,只需要將這個URL進行Hash對映,如