国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot項(xiàng)目上傳圖片(本地/OSS)

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot項(xiàng)目上傳圖片(本地/OSS)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

SpringBoot項(xiàng)目圖片上傳

圖片上傳到本地

可參考視頻:

【springboot上傳圖片的兩種方式詳解(本地/OSS對象存儲(chǔ))】 https://www.bilibili.com/video/BV1TK411Z7ad/?share_source=copy_web&vd_source=7f0416c71bcbaf44e08ad58367e3f198

視頻前十分鐘是從0開始編寫圖片保存到本地,可以照著視頻敲出來,不想看也可以直接復(fù)制我下面的代碼

  • Resources目錄下有一個(gè)upload.html文件,和一個(gè)static文件夾,static下又有一個(gè)images文件夾,如下圖

    SpringBoot項(xiàng)目上傳圖片(本地/OSS)

upload.html

  • upload.html

    這里主要就是一個(gè)form表單,用來提交數(shù)據(jù),但是要注意的是我這個(gè)表單用了postenctype=“multipart/form-data”,以及input的類型是file

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>上傳圖片</title>
    </head>
    <body>
    <form action="/uplaod" method="post" enctype="multipart/form-data">
        <input type="file" name="file" value="請選擇你要上傳的圖片">
        <input type="submit" value="上傳">
    </form>
    </body>
    </html>
    

controller

  • UploadController

    想直接看源碼的同學(xué)可以跳過分析,往下滑

    為了方便演示,我把業(yè)務(wù)都放在controller,,首先我們要先分析文件上傳有幾步

    1. 文件校驗(yàn)(包括但不限于,圖片的大小、圖片的類型、圖片是否為空、上傳的是否是文件等)

      • 我這里只做了一個(gè)判空的校驗(yàn),可以自己加需要的校驗(yàn)
      if (file.isEmpty()) {
          return "圖片上傳失敗";
      }
      
    2. 將圖片重命名,圖片重命名又可分為以下幾步

      • 獲取原來文件的后綴名,可以使用file.getOriginalFilename()獲取原來的文件名

        String originalFilename = file.getOriginalFilename(); //原來的圖片名
        
      • 生成一個(gè)隨機(jī)的新文件名,這里可以使用UUID.randomUUID()

        String uuid = UUID.randomUUID().toString().replace("-", "");
        
      • 把新名稱和原后綴名拼接起來作為新的文件名

        String fileName = uuid + ext;
        
    3. 把圖片上傳的指定的目錄下,我們這里講的是Resources,就以Resources為例

      • new ApplicationHome(this.getClass())可以獲取當(dāng)前程序運(yùn)行的路徑

        ApplicationHome applicationHome = new ApplicationHome(this.getClass());
        
      • 我們知道Java程序都是運(yùn)行的.class字節(jié)碼文件,所以getDir()獲取文件夾位置其實(shí)是.class字節(jié)碼文件的位置,需要使用getParentFile()兩次回到項(xiàng)目的主程序目錄

        applicationHome.getDir().getParentFile().getParentFile().getAbsolutePath()
        
      • 獲取到主目錄的絕對路徑拼接上從這里到Resources下的images

        String pre = applicationHome.getDir().getParentFile().getParentFile().getAbsolutePath() +
                "\\src\\main\\resources\\static\\images\\";
        
      • 最后通過file.transferTo(new File(path));把文件上傳到Resources下的images目錄,并且返回一個(gè)url地址

        String path = pre + fileName;
        

    完整controller代碼:

    @RestController
    public class UploadController {
    
        @PostMapping("/uplaod")
        public String upload(MultipartFile file) {
            //圖片校驗(yàn)(圖片是否為空,圖片大小,上傳的是不是圖片、圖片類型(例如只能上傳png)等等)
            if (file.isEmpty()) {
                return "圖片上傳失敗";
            }
            //可以自己加一點(diǎn)校驗(yàn) 例如上傳的是不是圖片或者上傳的文件是不是png格式等等 這里省略
            //獲取原來的文件名和后綴
            String originalFilename = file.getOriginalFilename();
    //        String ext = "." + FilenameUtils.getExtension(orgFileName); --需要導(dǎo)依賴
            String ext = "."+ originalFilename.split("\\.")[1];
            //生成一個(gè)新的文件名(以防有重復(fù)的名字存在導(dǎo)致被覆蓋)
            String uuid = UUID.randomUUID().toString().replace("-", "");
            String newName = uuid + ext;
            //拼接圖片上傳的路徑 url+圖片名
            ApplicationHome applicationHome = new ApplicationHome(this.getClass());
            String pre = applicationHome.getDir().getParentFile().getParentFile().getAbsolutePath() + "\\src\\main\\resources\\static\\images\\";
            String path = pre + newName;
            try {
                file.transferTo(new File(path));
            } catch (IOException e) {
                e.printStackTrace();
            }
            return path;
        }
    }
    

注意:

這里截取后綴名我為了代碼簡潔,直接鏈?zhǔn)秸{(diào)用獲取[1]索引位置的后綴,但是這樣不太好,可以獲取分割出來的字符串?dāng)?shù)組的最后一個(gè)元素

運(yùn)行

  • 啟動(dòng)Spring Boot項(xiàng)目

  • 訪問 http://localhost:8080/upload.html 路徑,在瀏覽器打開upload.html

    SpringBoot項(xiàng)目上傳圖片(本地/OSS)

  • 選擇上傳的圖片,點(diǎn)擊上傳

  • 上傳成功后,瀏覽器返回保存后的絕對路徑(這里我為了容易看懂返回的是絕對路徑,一般項(xiàng)目中用到的其實(shí)是相對路徑),如果圖片上傳失敗,瀏覽器會(huì)顯示圖片上傳失敗的提示信息

    SpringBoot項(xiàng)目上傳圖片(本地/OSS)

  • 圖片上傳完成之后,我們可以到項(xiàng)目中的==/images==目錄下查看,如果圖片存在就說明我們已經(jīng)成功的將圖片上傳到我們的項(xiàng)目中了

    SpringBoot項(xiàng)目上傳圖片(本地/OSS)

  • 同樣,我們可以到瀏覽器訪問這張圖片

    SpringBoot項(xiàng)目上傳圖片(本地/OSS)

  • 一般項(xiàng)目中其實(shí)并不會(huì)到這一步就結(jié)束,而是將這個(gè)圖片的路徑保存到數(shù)據(jù)庫,但是我這里就不繼續(xù)往下演示了

將圖片上傳到本地的功能也實(shí)現(xiàn)了,有需要的同學(xué)可以繼續(xù)往下看OSS對象存儲(chǔ)

OSS對象存儲(chǔ)

SpringBoot項(xiàng)目上傳圖片(本地/OSS)
在分布式項(xiàng)目中,通常一個(gè)項(xiàng)目中會(huì)用到很多服務(wù)器,如果我們還像單體項(xiàng)目中將文件/圖片上傳到本地,而下一次訪問的時(shí)候,如果我們訪問的服務(wù)器不是上一次保存的服務(wù)器的話,我們就訪問不到自己上傳的數(shù)據(jù),這顯然不是我們希望的,這時(shí)候我們就用到OSS對象存儲(chǔ)

  1. 首先你需要一個(gè)阿里云OSS對象存儲(chǔ)

    創(chuàng)建Bucket

    • 名稱:隨便起
    • 地域:想你的服務(wù)器在哪就選哪個(gè)(也是隨便選)
    • 存儲(chǔ)類型:標(biāo)準(zhǔn)存儲(chǔ)
    • 冗余存儲(chǔ):關(guān)閉
    • 版本控制:關(guān)閉
    • 讀寫權(quán)限:公共讀寫

    SpringBoot項(xiàng)目上傳圖片(本地/OSS)

    具體流程可以參考視頻:

    【springboot上傳圖片的兩種方式詳解(本地/OSS對象存儲(chǔ))】 https://www.bilibili.com/video/BV1TK411Z7ad/?share_source=copy_web&vd_source=7f0416c71bcbaf44e08ad58367e3f198

    這個(gè)視頻從11分鐘開始講的是OSS對象存儲(chǔ),照著視頻做一樣可以實(shí)現(xiàn),另外本篇博客也是基于該視頻

  2. 代碼

    • 導(dǎo)入依賴

      <dependency>
          <groupId>com.aliyun.oss</groupId>
          <artifactId>aliyun-sdk-oss</artifactId>
          <version>3.15.0</version>
      </dependency>
      <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.4</version>
      </dependency>
      <dependency>
          <groupId>commons-beanutils</groupId>
          <artifactId>commons-beanutils</artifactId>
          <version>1.9.3</version>
      </dependency>
      
    • 新建一個(gè)工具類UploadUtil在util包下

      1. 需要到阿里云官網(wǎng)獲取幾個(gè)參數(shù)

        • 阿里域名(開頭加https://,結(jié)尾加/,這個(gè)不能漏)

        • 地域節(jié)點(diǎn)(開頭加http://,一樣不能少)

          SpringBoot項(xiàng)目上傳圖片(本地/OSS)

        • accessKeyId

        • accessKeySecret

          SpringBoot項(xiàng)目上傳圖片(本地/OSS)

      2. 生成一個(gè)新的文件名

      3. 使用OSS客戶端對象上傳圖片返回url

      UploadUtil

      public class UploadUtil {
          //域名(開頭需要https://,結(jié)尾要/)
          public static final String ALI_DOMAIN = "https://你的阿里云域名/";
      
          public static String uploadImg(MultipartFile file) throws Exception {
              //生成的文件名
              String uuid = UUID.randomUUID().toString().replace("-", "");
              String originalFilename = file.getOriginalFilename();
              String ext = "." + FilenameUtils.getExtension(originalFilename);
              String fileName = uuid + ext;
              //地域節(jié)點(diǎn)(開頭需要http://)
              String endpoint = "你的地域節(jié)點(diǎn)";
              String accessKeyId = "你的accessKeyId";
              String accessKeySecret = "你的accessKeySecret";
              //OSS客戶端對象
              OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
              ossClient.putObject(
                      "你的倉庫名", //倉庫名
                      fileName, //文件名
                      file.getInputStream()
                      );
              ossClient.shutdown();
              return ALI_DOMAIN + fileName;
          }
      }
      

      controller

      @PostMapping("/upImg")
      public String upImg(MultipartFile file) throws IOException {
          return UploadUtil.uploadImage(file);
      }
      

      upload.html

      <form action="/upImg" method="post" enctype="multipart/form-data">
          <input type="file" name="file" value="上傳圖片">
          <input type="submit" value="上傳">
      </form>
      
    • 測試方法和本地運(yùn)行一致

    • 上傳成功后可以講路徑復(fù)制到瀏覽器訪問,也可以打開阿里云官網(wǎng)OSS對象存儲(chǔ)查看上傳的圖片

可能會(huì)遇到的問題

如何搭建spring boot項(xiàng)目

搭建一個(gè)spring boot項(xiàng)目

  • pom.xml導(dǎo)入web依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 編寫啟動(dòng)類
@SpringBootApplication
public class Run {
    public static void main(String[] args) {
        SpringApplication.run(Run.class, args);
    }
}

如何使用Postman測試文件上傳

如果要使用postman測試,可以不用寫html頁面

Params上加上Content-Type=multipart/form-data,Body中選擇form-data
SpringBoot項(xiàng)目上傳圖片(本地/OSS)

SpringBoot項(xiàng)目上傳圖片(本地/OSS)文章來源地址http://www.zghlxwxcb.cn/news/detail-413119.html

到了這里,關(guān)于SpringBoot項(xiàng)目上傳圖片(本地/OSS)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 若依OSS如何支持本地上傳,保存到服務(wù)器本地?

    SysOssController改動(dòng): ISysOssService改動(dòng): SysOssServiceImpl 改動(dòng): OssClient改動(dòng): windows配置: linux配置: 記得修改your.domain:8080為你自己服務(wù)器的接口ip或域名和端口。 數(shù)據(jù)示例:

    2024年04月16日
    瀏覽(29)
  • 【Node】騰訊云OSS存儲(chǔ)上傳圖片

    【Node】騰訊云OSS存儲(chǔ)上傳圖片

    目錄 準(zhǔn)備工作 后端Koa 前端Vue 建議 購買騰訊云OSS存儲(chǔ)后需要獲得以下幾個(gè)變量 SecretId:秘鑰id SecretKey:秘鑰 Bucket:存儲(chǔ)桶名稱 可在騰訊云的圖像界面創(chuàng)建存儲(chǔ)桶 Region:購買時(shí)選擇的區(qū)域 我這里是南京 prefix:可選 騰訊云中自定義的文件夾名稱 我這里是indexImages 后端項(xiàng)目中

    2024年02月07日
    瀏覽(15)
  • JAVA開發(fā)(騰訊云OSS圖片上傳)

    需求背景: 項(xiàng)目中需要上傳圖片。 存儲(chǔ)方式: 使用騰訊云的OSS組件。 代碼實(shí)現(xiàn): 1、使用騰訊云OSS需要使用的參數(shù)信息: OSS的域名; OSS的地域節(jié)點(diǎn); OSS存儲(chǔ)桶的名稱; OSS權(quán)限憑證; OSS權(quán)限訪問秘鑰; OSS圖片存儲(chǔ)策略; 使用的縮略圖策略; 允許上傳的圖片類型; 參數(shù)

    2024年02月11日
    瀏覽(24)
  • 【flutter直接上傳圖片到阿里云OSS】

    flutter直接上傳文件到阿里云需要獲取憑證,通過調(diào)用阿里云獲取憑證的接口能拿到下面這些參數(shù) 獲取憑證的接口一般是后臺(tái)去對接阿里云,前端調(diào)后臺(tái)接口即可。(STS.的這種AccessKeyId安全性高一些) 1.獲取OSSToken信息 token信息實(shí)體類 上傳方法 調(diào)用方式 以上直接是上傳圖片到

    2024年02月11日
    瀏覽(24)
  • 使用Mavon-Editor編輯器上傳本地圖片到又拍云云存儲(chǔ)(Vue+SpringBoot)

    使用Mavon-Editor編輯器上傳本地圖片到又拍云云存儲(chǔ)(Vue+SpringBoot)

    需求:將本地的圖片上傳到服務(wù)器或者云存儲(chǔ)中,考慮之后,這里我選的是上傳到又拍云云存儲(chǔ)。 原理:Mavon-Editor編輯器有兩個(gè)重要的屬性和事件 所以需要將用到Mavon-Editor編輯器的組件中添加上這個(gè)屬性和事件。 然后在方法中定義imgAdd函數(shù) 代碼片段: 其中請求路徑是你自

    2024年02月12日
    瀏覽(17)
  • Spring Boot 實(shí)現(xiàn)文件本地以及OSS上傳

    Maven依賴 封裝工具類 上面的代碼我們可以定義一個(gè)工具類,這樣在任何需要文件上傳的地方只需要調(diào)用 upload 方法即可,大大減少了代碼量 使用工具類

    2024年03月08日
    瀏覽(22)
  • java實(shí)現(xiàn)上傳圖片或視頻到oss中

    當(dāng)上傳圖片和視頻到OSS時(shí),你可以使用阿里云的Java SDK來實(shí)現(xiàn)。以下是一個(gè)示例的Java代碼,包括圖片和視頻的上傳功能: 在上述代碼中,你需要替換以下變量的值: ACCESS_KEY_ID和ACCESS_KEY_SECRET:阿里云的訪問密鑰,可以在阿里云控制臺(tái)獲取。 BUCKET_NAME:OSS存儲(chǔ)桶的名稱。 IMA

    2024年02月07日
    瀏覽(24)
  • Vue中實(shí)現(xiàn)圖片上傳,上傳后的圖片回顯,存儲(chǔ)圖片到服務(wù)器 【使用對象存儲(chǔ)OSS】

    Vue中實(shí)現(xiàn)圖片上傳,上傳后的圖片回顯,存儲(chǔ)圖片到服務(wù)器 【使用對象存儲(chǔ)OSS】

    前言 以下只提供一種思路,對新手可能不太友好。 這里將前端Vue上傳的圖片直接存儲(chǔ)到服務(wù)器上, Alibaba Cloud OSS : 阿里云對象存儲(chǔ)服務(wù)(Object Storage Service,簡稱 OSS),是阿里云提供的海量、安全、低成本、高可靠的云存儲(chǔ)服務(wù)。您可以在任何應(yīng)用、任何時(shí)間、任何地點(diǎn)存儲(chǔ)

    2024年02月06日
    瀏覽(124)
  • SpringBoot項(xiàng)目中前后端對圖片的上傳與接收操作

    在一個(gè)在線圖片分享系統(tǒng)中,前端使用JS+jQuery,后端使用Maven管理項(xiàng)目,采用分層次目錄結(jié)構(gòu)(Controller、Service、Mapper等)的一個(gè)Java語言編寫的SSM(Spring+SpringBoot+Mybatis)項(xiàng)目中,需要實(shí)現(xiàn)一個(gè)前端標(biāo)簽上傳圖片,后端Controller層接收并處理圖片。 上傳圖片的方式有很多,可以

    2024年02月09日
    瀏覽(15)
  • PHP之 使用阿里云對象存儲(chǔ)OSS上傳圖片

    PHP之 使用阿里云對象存儲(chǔ)OSS上傳圖片

    參考地址 https://blog.csdn.net/weixin_42672802/article/details/129136850 https://blog.csdn.net/HZX19941018/article/details/86066529

    2024年02月16日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包