最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現文件上傳和下載的方法詳解

 更新時間:2022年09月20日 10:33:19   作者:一切總會歸于平淡  
文件上傳,也稱為upload,是指將本地圖片、視頻、音頻等文件上傳到服務器上。文件下載,也稱為download,是指將文件從服務器傳輸到本地計算機的過程。本文將用Java實現文件上傳和下載,需要的可以參考一下

1、文件上傳

1.1 介紹

文件上傳,也稱為upload,是指將本地圖片、視頻、音頻等文件上傳到服務器上,可以供其他用戶瀏覽或下載的過程。文件上傳在項目中應用非常廣泛,我們經常發(fā)微博、發(fā)微信朋友圈都用到了文件上傳功能。

文件上傳時,對頁面的form表單有如下要求:

表單屬性取值說明
methodpost必須選擇post方式提交
enctypemultipart/form-data采用multipart格式上傳文件
typefile使用input的file控件上傳

舉例:

<form method="post" action="/common/upload" enctype="multipart/form-data">
  <input name="myFile" type="file"  />
  <input type="submit" value="提交" /> 
</form>

目前一些前端組件庫也提供了相應的上傳組件,例如Element-ui,但是底層原理還是基于form表單的文件上傳。

1.2 代碼實現

這里我主要實現后端代碼,對于前端頁面,可以使用ElementUI提供的上傳組件。

1、application.yml

首先我們需要在yml 文件里 配置一下文件存儲路徑。

2、Controller

然后我們就可以編寫上傳文件的Controller。

編寫文件上傳的方法, 通過MultipartFile類型的參數即可接收上傳的文件, 方法形參的名稱需要與頁面的file域的name屬性一致。

package com.jie.reggjie.controller;
 
 
import com.jie.reggjie.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
 
/**
 * 文件上傳和下載
 */
@RestController
@RequestMapping("/common")
@Slf4j
public class CommonController {
    @Value("${reggie.path}")
    private String basePath;
 
    /**
     * 文件上傳
     *
     * @param file
     * @return
     */
    @PostMapping("/upload")
    public R<String> upload(MultipartFile file) {
        
        return null;
    }
}    

實現步驟:

1、獲取文件的原始文件名, 通過原始文件名獲取文件后綴。

2、我們可以通過UUID重新聲明文件名, 避免文件名稱重復造成文件覆蓋。

3、創(chuàng)建文件存放目錄,防止目錄不存在導致文件上傳失敗。

4、將上傳的臨時文件轉存到指定位置。

注:

因為我們點擊上傳其實是將文件臨時保存到我們計算機的一個臨時文件夾內,如果我們不將其轉存,本次請求結束后,文件也會自動刪除。

最后將文件名返回,我這里需要將文件名存到數據庫內。

完整代碼:

/**
     * @description: 文件上傳
     * @author: Jie
     * @date: 2022/8/15 10:16
     * @param: [file] 文件
     * @return: 文件名
     **/
    @PostMapping("/upload")
    public R<String> upload(MultipartFile file) {
        // 1、獲取文件的原始文件名, 通過原始文件名獲取文件后綴 例如:abc.jpg
        String originalFilename = file.getOriginalFilename();
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
 
        // 2、使用UUID重新生成文件名,防止文件名稱重復造成文件覆蓋
        String fileName = UUID.randomUUID().toString() + suffix;
 
        // 3、創(chuàng)建一個目錄對象
        File dir = new File(basePath);
        //判斷當前目錄是否存在
        if (!dir.exists()) {
            //目錄不存在,需要創(chuàng)建
            dir.mkdirs();
        }
 
        try {
            // 4、將臨時文件轉存到指定位置
            file.transferTo(new File(basePath + fileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return R.success(fileName);
    }

2、下載

2.1 介紹

文件下載,也稱為download,是指將文件從服務器傳輸到本地計算機的過程。

通過瀏覽器進行文件下載,通常有兩種表現形式:

1、 以附件形式下載,彈出保存對話框,將文件保存到指定磁盤目錄

2、直接在瀏覽器中打開

而我要實現的就是在瀏覽器中直接打開。

文件下載,前端頁面可以使用<img>標簽展示下載的圖片。

<img v-if="imageUrl" :src="imageUrl" class="avatar"></img>

那么,通過<img>標簽如何展示圖片數據呢,我們來看一下具體的流程:

在文件上傳成功后,在 handleAvatarSuccess 方法中獲取文件上傳成功之后返回的數據(文件名),然后調用 /common/download?name=xxx 進行文件的下載。

在這里,我們想讓上傳的照片能夠在頁面展示出來,所以我們就需要在服務端將文件以流的形式寫回瀏覽器。

2.2 代碼實現

在 Controller 中定義方法download,并接收頁面?zhèn)鬟f的參數name,然后讀取圖片文件的數據,然后以流的形式寫回瀏覽器。

/**
* @description: 文件下載
* @author: Jie
* @date: 2022/8/15 10:46
**/
@GetMapping("/download")
public void download(String name, HttpServletResponse response){
 
}

實現步驟:

1、定義輸入流,通過輸入流讀取文件內容。

2、通過response對象,獲取到輸出流。

3、通過response對象設置響應數據格式(image/jpeg)。

4、 通過輸入流讀取文件數據,然后通過上述的輸出流寫回瀏覽器。

5、 關閉資源

完整代碼:

/**
     * @description: 文件下載
     * @author: Jie
     * @date: 2022/8/15 10:46
     **/
    @GetMapping("/download")
    public void download(String name, HttpServletResponse response){
        try {
            // 1、定義輸入流,通過輸入流讀取文件內容
            FileInputStream fileInputStream = new FileInputStream(new File(basePath + name));
 
            // 2、通過response對象,獲取到輸出流
            ServletOutputStream outputStream = response.getOutputStream();
 
            // 3、通過response對象設置響應數據格式(image/jpeg)
            response.setContentType("image/jpeg");
 
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = fileInputStream.read(bytes)) != -1){
                // 4、通過輸入流讀取文件數據,然后通過上述的輸出流寫回瀏覽器
                outputStream.write(bytes,0,len);
                // 刷新
                outputStream.flush();
            }
 
            // 5、關閉資源
            outputStream.close();
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

到此這篇關于Java實現文件上傳和下載的方法詳解的文章就介紹到這了,更多相關Java文件上傳下載內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Bloc事件流是一個阻塞隊列結論解析

    Bloc事件流是一個阻塞隊列結論解析

    這篇文章主要為大家介紹了Bloc事件流是一個阻塞隊列結論解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • 使用feign配置網絡ip代理

    使用feign配置網絡ip代理

    這篇文章主要介紹了使用feign配置網絡ip代理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java線程間的通信方式詳解

    Java線程間的通信方式詳解

    這篇文章主要為大家詳細介紹了Java線程間的通信方式,以代碼結合文字的方式來討論線程間的通信,感興趣的朋友可以參考一下
    2016-05-05
  • Java實現Word/Pdf/TXT轉html的實例代碼

    Java實現Word/Pdf/TXT轉html的實例代碼

    本文主要介紹了Java實現Word/Pdf/TXT轉html的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Java連接六類數據庫技巧全攻略

    Java連接六類數據庫技巧全攻略

    本文主要為大家介紹了Java與Oracle、DB2、Sql Server、Sybase、MySQL、PostgreSQL等數據庫連接的方法。
    2015-09-09
  • Java 內置Http Server構建web應用案例詳解

    Java 內置Http Server構建web應用案例詳解

    這篇文章主要介紹了Java 內置Http Server構建web應用案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • SpringBoot中的ImportSelector類動態(tài)加載bean詳解

    SpringBoot中的ImportSelector類動態(tài)加載bean詳解

    這篇文章主要介紹了SpringBoot中的ImportSelector類動態(tài)加載bean詳解,ImportSelector接口是spring中導入外部配置的核心接口,根據給定的條件(通常是一個或多個注釋屬性)判定要導入那個配置類,在spring自動化配置和@EnableXXX中都有它的存在,需要的朋友可以參考下
    2024-01-01
  • MybatisPlus實現insertBatchSomeColumn進行批量增加

    MybatisPlus實現insertBatchSomeColumn進行批量增加

    本文主要介紹了MybatisPlus實現insertBatchSomeColumn進行批量增加,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • java Long==Long有趣的現象詳解

    java Long==Long有趣的現象詳解

    這篇文章主要給大家介紹了關于java Long==Long有趣的現象的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • JAVA實現社會統(tǒng)一信用代碼校驗的方法

    JAVA實現社會統(tǒng)一信用代碼校驗的方法

    這篇文章主要介紹了JAVA實現社會統(tǒng)一信用代碼校驗的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07

最新評論

保康县| 新建县| 汝阳县| 宿迁市| 秦安县| 湾仔区| 临高县| 嘉兴市| 左贡县| 鄄城县| 孝昌县| 文化| 称多县| 保康县| 西畴县| 庄浪县| 怀安县| 灌南县| 宝坻区| 伊金霍洛旗| 措勤县| 伊金霍洛旗| 哈尔滨市| 海安县| 平乡县| 汕尾市| 宁强县| 同仁县| 台江县| 彭山县| 翁源县| 临沂市| 平泉县| 开封市| 永寿县| 筠连县| 吉水县| 惠东县| 乌恰县| 高阳县| 孟州市|