欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot實現(xiàn)本地文件存儲及預(yù)覽過程

 更新時間:2022年11月16日 16:42:00   作者:青年人責(zé)任  
這篇文章主要介紹了SpringBoot實現(xiàn)本地文件存儲及預(yù)覽過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、前言

若使用本機存儲來存放文件資源

核心實現(xiàn)過程:

  • 上傳文件,保存文件(本地磁盤)
  • 返回文件HTTP訪問服務(wù)器路徑給前端,進行效果展示

二、儲備

服務(wù)端接收上傳的目的是提供文件的訪問服務(wù),對于SpringBoot而言,其對靜態(tài)資源訪問提供了很好的支持,使用其提供的基本默認(rèn)配置可以滿足開發(fā)需求,同時,又支持開發(fā)人員進行自定義配置。

SpringBoot默認(rèn)將 / 所有訪問映射到一下目錄:**

classpath:/META-INF/resources
classpath:/static
classpath:/public
classpath:/resources

在src/main/resources下新建pubic、resources、static三個文件夾,分別放入x.png、xx.png、xxx.png三張圖片

如下:

啟動項目后,分別訪問:

http://localhost:9999/x.png
http://localhost:9999/xx.png
http://localhost:9999/xxx.png

正常返回圖片資源。

說明,SpringBoot默認(rèn)會挨個從pubic、resources、static里面找是否存在相應(yīng)的資源,如果有則直接返回。

可以看出這里的靜態(tài)資源都在classpath下。

那么就出現(xiàn)問題:

  • 應(yīng)用的文件資源不能和項目代碼分開存儲
  • 項目打包困難,當(dāng)上傳的文件越來越多,項目的打包jar越來越大
  • 代碼與文件數(shù)據(jù)不能分開存儲,就意味著文件數(shù)據(jù)的備份將變得復(fù)雜

三、方案

SpringBoot為我們提供了 spring.resources.static-locations 配置自定義靜態(tài)文件的位置:

spring:
    web:
        resources:
          static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${demo.web.upload-path}
 
demo:
  web:
    upload-path: D:/data/
  • 配置 demo.web.upload-path 為與項目代碼分離的靜態(tài)資源路徑,即:文件上傳保存根路徑
  • 配置 spring.web.resources.static-locations 除了帶上SpringBoot默認(rèn)的靜態(tài)資源路徑之外,加上file:${demo.web.upload-path}指向外部的文件資源上傳路徑,即:該路徑下的靜態(tài)資源可以直接對外提供HTTP訪問服務(wù)

四、Java Code

public String upload(MultipartFile file, HttpServletRequest request) {
        if (file == null) {
            throw new BizException("參數(shù)為空");
        }
        // 在 uploadPath 文件夾中通過日期對上傳的文件歸類保存
        // 例如:/2022/02/22/df9a66f1-760b-4f95-9faf-b5a216966718.png
        String format = sdf.format(new Date());
        File folder = new File(uploadPath + format);
        if (!folder.isDirectory()) {
            folder.mkdirs();
        }
 
        // 對上傳的文件重命名, 避免文件重名
        String oldName = file.getOriginalFilename();
        String newName = UUID.randomUUID().toString()
                + oldName.substring(oldName.lastIndexOf("."), oldName.length());
        try {
            // 文件保存
            file.transferTo(new File(folder, newName));
 
            // 返回上傳文件的訪問路徑
            // 例如:http://localhost:9999/2022/02/22/df9a66f1-760b-4f95-9faf-b5a216966718.png
            String filePath = request.getScheme() + "://" + request.getServerName()
                    + ":" + request.getServerPort() + request.getContextPath() + "/" + format + newName;
 
            return filePath;
        } catch (IOException e) {
            throw new BizException("系統(tǒng)錯誤");
        }
 
    }

五、模擬文件

將此 upload.html 文件放到 classpath:public 目錄下,對外提供訪問。

如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadFile" value="請選擇上傳文件">
    <input type="submit" value="保存">
</form>
</body>
</html>

訪問測試,點擊"選擇文件",之后"保存":

文件被保存到服務(wù)端的 demo.web.upload-path 指定的資源目錄下

瀏覽器端響應(yīng)結(jié)果如下,返回一個文件HTTP訪問路徑:

http://localhost:9999/2022/02/22/df9a66f1-760b-4f95-9faf-b5a216966718.png

使用該HTTP訪問路徑,在瀏覽器端訪問效果如下。

證明我們的文件已經(jīng)成功上傳到服務(wù)端,以后需要訪問該圖片就通過這個HTTP URL就可以了?。?!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中的ReentrantReadWriteLock使用詳解

    Java中的ReentrantReadWriteLock使用詳解

    這篇文章主要介紹了Java中的ReentrantReadWriteLock使用詳解,ReentrantReadWriteLock是Java中的一個鎖實現(xiàn),它提供了讀寫分離的功能,這種讀寫分離的機制可以提高并發(fā)性能,特別適用于讀多寫少的場景,需要的朋友可以參考下
    2023-11-11
  • 透明化Sharding-JDBC數(shù)據(jù)庫字段加解密方案

    透明化Sharding-JDBC數(shù)據(jù)庫字段加解密方案

    這篇文章主要為大家介紹了透明化Sharding-JDBC數(shù)據(jù)庫字段加解密方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • Java基礎(chǔ)學(xué)習(xí)筆記之?dāng)?shù)組詳解

    Java基礎(chǔ)學(xué)習(xí)筆記之?dāng)?shù)組詳解

    這篇文章主要介紹了Java基礎(chǔ)學(xué)習(xí)筆記之?dāng)?shù)組,結(jié)合實例形式詳細(xì)分析了java的基本概念、定義、迭代、輸出、反轉(zhuǎn)、排序等常用操作技巧,需要的朋友可以參考下
    2019-08-08
  • Spring @ExceptionHandler注解統(tǒng)一異常處理和獲取方法名

    Spring @ExceptionHandler注解統(tǒng)一異常處理和獲取方法名

    這篇文章主要介紹了Spring注解之@ExceptionHandler 統(tǒng)一異常處理和獲取方法名,在實際項目中,合理使用@ExceptionHandler能夠提高代碼的可維護性和用戶體驗,通過本文的解析和實踐,讀者可以更好地理解和掌握@ExceptionHandler的用法和原理
    2023-09-09
  • Java語言實現(xiàn)最大堆代碼示例

    Java語言實現(xiàn)最大堆代碼示例

    這篇文章主要介紹了Java語言實現(xiàn)最大堆代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12
  • java實現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信)

    java實現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信)

    這篇文章主要介紹了java實現(xiàn)基于TCP協(xié)議網(wǎng)絡(luò)socket編程(C/S通信),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • SpringBoot使用AOP記錄接口操作日志的方法

    SpringBoot使用AOP記錄接口操作日志的方法

    日志記錄量是很大的,所以只記錄關(guān)鍵地方并按期歸檔,最好是存在如elasticsearch中,如果存在數(shù)據(jù)庫中,分表是不錯的選擇,這篇文章主要介紹了SpringBoot使用AOP記錄接口操作日志的方法,需要的朋友可以參考下
    2022-08-08
  • Java實現(xiàn)花卉管理系統(tǒng)

    Java實現(xiàn)花卉管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)花卉管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • emoji表情與unicode編碼互轉(zhuǎn)的實現(xiàn)(JS,JAVA,C#)

    emoji表情與unicode編碼互轉(zhuǎn)的實現(xiàn)(JS,JAVA,C#)

    這篇文章主要介紹了emoji表情與unicode編碼互轉(zhuǎn)的實現(xiàn)(JS,JAVA,C#),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java讀取properties配置文件的8種方式匯總

    Java讀取properties配置文件的8種方式匯總

    讀取.properties配置文件在實際的開發(fā)中使用的很多,總結(jié)了一下,下面這篇文章主要給大家介紹了關(guān)于Java讀取properties配置文件的8種方式,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評論