中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

江帥帥:精通 Spring Boot 系列 06

發布時間:2020-08-08 13:10:11 來源:ITPUB博客 閱讀:159 作者:奈學教育 欄目:編程語言

Spring Boot 文件的上傳下載

說真的,在 Spring Boot 實現文件下載,真的是方便到讓我顫抖。Java 中實現文件上傳可以用兩個組件:CommonMultipartResolver 和 StandardServletMultipartResolver。

Spring Boot 在 web 模塊中集成了 Spring MVC ,文件上傳這塊兒的支持是可以通過即插即用的 MultipartResolver 實現類:CommonMultipartResolver。如果用它,則需要使用 commons-fileupload 組件來處理。

Spring Boot 提供的文件上傳自動化配置類是 MultipartAutoConfiguration 中默認使用了 StandardServletMultipartResolver,在上傳文件甚至能夠做到零配置。

1. 單文件上傳

1)添加 fileUpload.html 文件

在上傳頁面的表單中,添加一個 type 為 file 的控件,用來選擇需要上傳的圖片文件。上傳的接口是“/upload”,另外 method 要設置為“post”,還有 enctype 要設置為“multipart/form-data”,代碼具體如下:

    
    upload

2)添加 FileUploadController 文件

首先,設置我們的文件上傳路徑為項目運行目錄下的 upload 文件夾。然后,我們用 MultipartFile 來綁定上傳的文件,使用 transferTo() 方法可以非常方便實現文件存儲到磁盤當中。具體實現代碼如下:

()
{
    String path = req.getSession().getServletContext().getRealPath();
    File folder =  File(path);
     (!folder.isDirectory()) {
        folder.mkdirs();
    }
    String oName = uploadFile.getOriginalFilename();
    String nName = UUID.randomUUID().toString() + oName.substring(oName.lastIndexOf(), oName.length());
     {
        uploadFile.transferTo( File(folder + File.separator + nName));
        String filePath = req.getScheme() +  + req.getServerName() +  + req.getServerPort() +  + nName;
         ;
    }  (IOException ex) {
        ex.printStackTrace();
    }
     ;
}

地址欄中,輸入 http://localhost:8080/fileUpload.html 選擇文件上傳,具體運行效果如下:

江帥帥:精通 Spring Boot 系列 06

江帥帥:精通 Spring Boot 系列 06

2. 采用對象方式來上傳文件

很多時候的上傳操作,也都會把文件作為對象的屬性進行保存,具體如何實現?下面通過注冊頁面,填寫用戶的相關信息,然后點擊注冊來上傳 User 對象。

1)添加 fileUpload2.html 文件

通過一個表單,來收集用戶的具體信息,然后點擊“注冊用戶”按鈕即可提交 /register 注冊請求。代碼具體如下:

    
        用戶名:
        密碼:
        頭像:

2)添加 User 類

User 類主要是用來封裝用戶信息的,其中 MultipartFile 類型的 pic 是用來接收上傳的圖像文件。

 {
     String username;
     String password;
     MultipartFile pic;
    
}

3)添加 userRegister() 方法

在 userRegister() 方法形參列表中,使用 @ModelAttribute 注解將表單提交的數據綁定到 User 對象中,其中圖片會保存到 User 的 pic 屬性中,然后轉換為 Multipart 類型。文件上傳成功之后,所有的用戶信息都保存到 model 當中。

 {
    ()
    {
         (!user.getPic().isEmpty()) {
            String picPath = req.getServletContext().getRealPath();
            String picName = user.getPic().getOriginalFilename();
            File filePath =  File(picPath, picName);
             (!filePath.getParentFile().exists()){
                filePath.getParentFile().mkdirs();
            }
            user.getPic().transferTo( File(picPath + File.separator + picName));
            model.addAttribute(, user);
             ;
        }  {
             ;
        }
    }
}

3)在 templates 目錄中,添加 userMsg.html 文件

    
        
            
            用戶名

運行效果,具體如下:

江帥帥:精通 Spring Boot 系列 06

3. 多文件上傳

1)添加 fileUpload2.html 頁面
    選第一張圖片:
    選第二張圖片:
    選第三張圖片:
2)添加 uploadFiles() 方法
()
{
    String path = req.getSession().getServletContext().getRealPath();
    File folder =  File(path);
     (!folder.isDirectory()) {
        folder.mkdirs();
    }
     ( != uploadFiles && uploadFiles.length > ) {
         (MultipartFile uploadFile : uploadFiles) {
            String oName = uploadFile.getOriginalFilename();
            String nName = UUID.randomUUID().toString() + oName.substring(oName.lastIndexOf(), oName.length());
             {
                uploadFile.transferTo( File(folder, nName));
                 ;
            }  (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
     ;
}

運行結果,具體如下:

江帥帥:精通 Spring Boot 系列 06

4. 文件下載

1)編輯 userMsg.html 頁面
    
        
        用戶名
        下載頭像
2)添加 downloadPic() 方法

這里使用了 ResponseEntity 類型,就能定義返回的 HttpHeaders、BodyBuilder 和 HttpStatus,然后返回客戶端下載。

(value=)
 ResponseEntity<[]> downloadPic(HttpServletRequest request, () String filename, () String userAgent, Model model) Exception{
    String path = request.getServletContext().getRealPath(
        );
    File file =  File(path + File.separator + filename);
    BodyBuilder builder = ResponseEntity.ok();
    builder.contentLength(file.length());
    
    builder.contentType(MediaType.APPLICATION_OCTET_STREAM);
    
    filename = URLEncoder.encode(filename, );
     (userAgent.indexOf() > ) {
        
        builder.header(,  + filename);
    }  {
        
        builder.header(,  + filename);
    }
     builder.body(FileUtils.readFileToByteArray(file));
}

運行效果,具體如下:

江帥帥:精通 Spring Boot 系列 06

免費領取更多技術資料及視頻

江帥帥:精通 Spring Boot 系列 06

本文來源于:奈學開發者社區-江帥帥

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

册亨县| 新宁县| 神木县| 扬州市| 眉山市| 鹤峰县| 隆子县| 将乐县| 三亚市| 保亭| 乌兰浩特市| 谷城县| 维西| 西安市| 微博| 长顺县| 荔波县| 曲靖市| 大邑县| 大同县| 龙门县| 开平市| 崇阳县| 上蔡县| 勃利县| 绩溪县| 石林| 西丰县| 金阳县| 阿拉善左旗| 治多县| 富蕴县| 舟山市| 噶尔县| 江陵县| 会泽县| 宁强县| 自治县| 筠连县| 家居| 莱芜市|