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

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

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

一、前言

若使用本機(jī)存儲來存放文件資源

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

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

二、儲備

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

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

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

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

如下:

啟動(dòng)項(xiàng)目后,分別訪問:

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

正常返回圖片資源。

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

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

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

  • 應(yīng)用的文件資源不能和項(xiàng)目代碼分開存儲
  • 項(xiàng)目打包困難,當(dāng)上傳的文件越來越多,項(xià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 為與項(xiàng)目代碼分離的靜態(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)錯(cuò)誤");
        }
 
    }

五、模擬文件

將此 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>

訪問測試,點(diǎn)擊"選擇文件",之后"保存":

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

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

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

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

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

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

相關(guān)文章

最新評論

汽车| 阿鲁科尔沁旗| 伊宁市| 雅江县| 大城县| 广宁县| 浙江省| 扶风县| 白朗县| 禹城市| 茶陵县| 深州市| 林西县| 余江县| 富民县| 唐河县| 三台县| 泽州县| 广宁县| 南雄市| 监利县| 甘孜| 察雅县| 宜昌市| 邵武市| 如东县| 东山县| 延津县| 聂拉木县| 黑龙江省| 远安县| 昔阳县| 宾川县| 原阳县| 永吉县| 灵川县| 荆门市| 县级市| 奉贤区| 山阴县| 泸水县|