在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在Spring Boot中整合OSS的代碼

Q4MP_gh_c472c21 ? 來源:沉默王二 ? 作者:沉默王二 ? 2022-04-24 09:45 ? 次閱讀

小二是新來的實習生,作為技術 leader,我給他安排了一個非常簡單的練手任務,把前端 markdown 編輯器里上傳的圖片保存到服務器端,結果他真的就把圖片直接保存到了服務器上,這下可把我氣壞了,就不能搞個對象存儲服務,比如說 OSS、MinIO?

他理直氣壯地反駁道:“誰讓你不講清楚,我去找老板把你開掉!”我瞬間就慫了,說,“來來來,我手把手教你怎么把圖片保存到 OSS 上,好不好?”

“不用了,還是我來教你吧。”小二非常自信,下面是他在 Spring Boot 應用中整合 OSS 做的記錄。

一、開通 OSS

OSS 也就是 Object Storage Service,是阿里云提供的一套對象存儲服務,國內的競品還有七牛云的 Kodo和騰訊云的COS。

第一步,登錄阿里云官網,搜索“OSS”關鍵字,進入 OSS 產品頁。

第二步,如果是 OSS 新用戶的話,可以享受 6 個月的新人專享優惠價,不過續費的時候還是會肉疼。

第三步,進入 OSS 管理控制臺,點擊「Bucket 列表」,點擊「創建 Bucket」。

5be9c328-c2f5-11ec-bce3-dac502259ad0.png

Bucket 的詞面意思是桶,這里指存儲空間,就是用于存儲對象的容器。注意讀寫權限為“公共讀”,也就是允許互聯網用戶訪問云空間上的圖片。

第四步,點擊「確定」就算是開通成功了。

二、整合 OSS

第一步,在 pom.xml 文件中添加 OSS 的依賴。



com.aliyun.oss
aliyun-sdk-oss
3.10.2

第二步,在 application.yml 文件中添加 OSS 配置項。

aliyun:
oss:
#oss對外服務的訪問域名
endpoint:oss-cn-beijing.aliyuncs.com
#訪問身份驗證中用到用戶標識
accessKeyId:LTAI5
#用戶用于加密簽名字符串和oss用來驗證簽名字符串的密鑰
accessKeySecret:RYN
#oss的存儲空間
bucketName:itwanger-oss1
#上傳文件大小(M)
maxSize:3
#上傳文件夾路徑前綴
dir:
prefix:codingmore/images/

第三步,新增 OssClientConfig.java 配置類,主要就是通過 @Value 注解從配置文件中獲取配置項,然后創建 OSSClient。

@Configuration
publicclassOssClientConfig{
@Value("${aliyun.oss.endpoint}")
Stringendpoint;
@Value("${aliyun.oss.accessKeyId}")
StringaccessKeyId;
@Value("${aliyun.oss.accessKeySecret}")
StringaccessKeySecret;

@Bean
publicOSSClientcreateOssClient(){
return(OSSClient)newOSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
}
}

第四步,新增文件上傳接口 OssController.java,參數為 MultipartFile。

@Controller
@Api(tags="上傳")
@RequestMapping("/ossController")
publicclassOssController{
@Autowired
privateIOssServiceossService;

@RequestMapping(value="/upload",method=RequestMethod.POST)
@ResponseBody
@ApiOperation("上傳")
publicResultObjectupload(@RequestParam("file")MultipartFilefile,HttpServletRequestreq){
returnResultObject.success(ossService.upload(file));
}
}

第五步,新增 Service,將文件上傳到 OSS,并返回文件保存路徑。

@Service
publicclassOssServiceImplimplementsIOssService{

@Value("${aliyun.oss.maxSize}")
privateintmaxSize;

@Value("${aliyun.oss.bucketName}")
privateStringbucketName;

@Value("${aliyun.oss.dir.prefix}")
privateStringdirPrefix;

@Autowired
privateOSSClientossClient;
@Override
publicStringupload(MultipartFilefile){
try{
returnupload(file.getInputStream(),file.getOriginalFilename());
}catch(IOExceptione){
LOGGER.error(e.getMessage());
}
returnnull;
}

@Override
publicStringupload(InputStreaminputStream,Stringname){
StringobjectName=getBucketName(name);
//創建PutObject請求。
ossClient.putObject(bucketName,objectName,inputStream);
returnformatPath(objectName);
}
privateStringgetBucketName(Stringurl){
Stringext="";
for(StringextItem:imageExtension){
if(url.indexOf(extItem)!=-1){
ext=extItem;
break;
}
}
returndirPrefix+DateUtil.today()+"/"+IdUtil.randomUUID()+ext;
}

privateStringformatPath(StringobjectName){
return"https://"+bucketName+"."+ossClient.getEndpoint().getHost()+"/"+objectName;
}
}

第六步,打開 Apipost,測試 OSS 上傳接口,注意參數選擇文件,點擊發送后可以看到服務器端返回的圖片鏈接。

5c01e5d4-c2f5-11ec-bce3-dac502259ad0.png

第七步,進入阿里云 OSS 后臺管理,可以確認圖片確實已經上傳成功。

三、拉取前端代碼來測試 OSS 上傳接口

codingmore-admin-web 是編程喵(Codingmore)的前端管理項目,可以通過下面的地址拉取到本地。

https://github.com/itwanger/codingmore-admin-web

執行 yarn run dev 命令后就可以啟動 Web 管理端了,進入到文章編輯頁面,選擇一張圖片進行上傳,可以確認圖片是可以正常從前端上傳到服務器端,服務器端再上傳到 OSS,之后再返回前端圖片訪問鏈接的。

5c35d768-c2f5-11ec-bce3-dac502259ad0.png

四、利用 OSS 進行自動轉鏈

第一步,在 PostsServiceImpl.java 中添加圖片轉鏈的方法,主要利用正則表達式找出文章內容中的外鏈,然后將外鏈的圖片上傳到 OSS,然后再替換掉原來的外鏈圖片。

//匹配圖片的markdown語法
//![](hhhx.png)
//![xx](hhhx.png?ax)
publicstaticfinalStringIMG_PATTERN="\!\[.*\]\((.*)\)";

privatevoidhandleContentImg(Postsposts){
Stringcontent=posts.getPostContent();

Patternp=Pattern.compile(IMG_PATTERN,Pattern.CASE_INSENSITIVE);
Matcherm=p.matcher(content);

Map>map=newHashMap<>();

while(m.find()){
StringimageTag=m.group();
LOGGER.info("使用分組進行替換{}",imageTag);

StringimageUrl=imageTag.substring(imageTag.indexOf("(")+1,imageTag.indexOf(")"));

//確認是本站鏈接,不處理
if(imageUrl.indexOf(iOssService.getEndPoint())!=-1){
continue;
}

//通過線程池將圖片上傳到OSS
Futurefuture=ossUploadImageExecutor.submit(()->{
returniOssService.upload(imageUrl);
});
map.put(imageUrl,future);
}

for(StringoldUrl:map.keySet()){
Futurefuture=map.get(oldUrl);

try{
StringimageUrl=future.get();
content=content.replace(oldUrl,imageUrl);
}catch(InterruptedException|ExecutionExceptione){
LOGGER.error("獲取圖片鏈接出錯{}",e.getMessage());
}

}
posts.setPostContent(content);
}

第二步,在 OssServiceImpl.java 中添加根據外鏈地址上傳圖片到 OSS 的方法。

publicStringupload(Stringurl){
StringobjectName=getFileName(url);
try(InputStreaminputStream=newURL(url).openStream()){
ossClient.putObject(bucketName,objectName,inputStream);
}catch(IOExceptione){
LOGGER.error(e.getMessage());
}
returnformatOSSPath(objectName);
}

第三步,通過 Web 管理端來測試外鏈是否轉鏈成功。先找兩張外鏈的圖片,可以看到 markdown 在預覽的時候就不顯示。

5c510984-c2f5-11ec-bce3-dac502259ad0.png

然后我們點擊發布,可以看到兩張圖片都正常顯示了,因為轉成了 OSS 的圖片訪問地址。

5c68c286-c2f5-11ec-bce3-dac502259ad0.png

五、小結

綜上來看,實習生小二在 Spring Boot 中整合 OSS 的代碼還是挺靠譜的,也許 OSS+CDN 才是圖床的最好解決方案。

需要源碼的小伙伴,可以直接到編程喵源碼路徑拉取:

https://github.com/itwanger/coding-more

END 審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9317

    瀏覽量

    86086
  • 代碼
    +關注

    關注

    30

    文章

    4829

    瀏覽量

    69071
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    14393

原文標題:崩潰!實習生竟然把圖片直接存到了服務器上…

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    校園點餐訂餐外賣跑腿Java源碼

    創建一個校園點餐訂餐外賣跑腿系統是一個復雜的項目,涉及到前端、后端、數據庫設計等多個方面。在這里,我可以提供一個簡化的Java后端示例,使用Spring Boot框架來搭建一個基本的API服務。這個
    的頭像 發表于 12-24 14:55 ?187次閱讀
    校園點餐訂餐外賣跑腿Java源碼

    SSM與Hibernate的整合使用

    作為Java持久化框架的代表,常被整合到SSM框架。 SSM框架簡介 SSM框架是指Spring、SpringMVC和MyBatis三個框架的整合使用。
    的頭像 發表于 12-17 09:14 ?233次閱讀

    SSM開發環境的搭建教程 SSM與Spring Boot的區別

    件是Web項目的核心配置文件。 webapp 目錄下創建一個 index.jsp 文件作為項目的首頁。 配置 pom.xml 文件 : pom.xml 文件添加SSM框架所需的依
    的頭像 發表于 12-16 18:13 ?673次閱讀

    SSM框架在Java開發的應用 如何使用SSM進行web開發

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web開發中常用的技術棧。它通過分層架構,實現了視圖、控制、業務邏輯和數據訪問的分離,提高了代碼的可維護性和可擴展性
    的頭像 發表于 12-16 17:28 ?653次閱讀

    Spring 應用合并之路(二):峰回路轉,柳暗花明

    提醒下,決定拋開 Spring Boot 內置的父子容器方案,完全自己實現父子容器。 如何加載 web 項目? 現在的難題只有一個:如何加載 web 項目?加載完成后,如何持續持有 web 項目?經過思考后,可以創建一個 boot
    的頭像 發表于 12-12 11:22 ?840次閱讀

    如何在Petalinux下Patch u-boot源碼

    軟件開發過程我們經常遇到用 Patch 來傳遞和更新代碼的場景。本文以一個端到端的例子來演示 Petalinux 使用過程,如何給
    的頭像 發表于 12-04 16:26 ?1168次閱讀
    如何在Petalinux下Patch u-<b class='flag-5'>boot</b>源碼

    Spring事務實現原理

    這些操作。 spring事務有編程式事務和聲明式事務兩種實現方式。編程式事務是通過編寫代碼來管理事務的提交、回滾、以及事務的邊界。這意味著開發者需要在代碼顯式地調用事務的開始、提交和
    的頭像 發表于 11-08 10:10 ?875次閱讀
    <b class='flag-5'>Spring</b>事務實現原理

    Spring Cloud Gateway網關框架

    Spring Cloud Gateway網關框架 本軟件微服務架構采用Spring Cloud Gateway網關控制框架,Spring Cloud Gateway是
    的頭像 發表于 08-22 09:58 ?545次閱讀
    <b class='flag-5'>Spring</b> Cloud Gateway網關框架

    單片機boot0和boot1怎么設置

    單片機Boot0和Boot1簡介 Boot0和Boot1是單片機啟動模式選擇引腳,用于選擇單片機的啟動模式。 Boot0和
    的頭像 發表于 08-22 09:50 ?3069次閱讀

    stm32讀取boot引腳狀態

    STM32微控制器Boot引腳(通常指的是BOOT0和BOOT1引腳)的狀態決定了設備啟動時的引導模式。這些引腳的狀態
    的頭像 發表于 08-22 09:48 ?1602次閱讀

    stm32boot0和boot1對應哪個p引腳

    STM32系列微控制器是一種廣泛應用于嵌入式系統領域的32位微控制器。STM32系列微控制器BOOT0和BOOT1是兩個重要的引腳,它們用于設置設備的啟動模式。 首先,讓我們了解
    的頭像 發表于 08-22 09:40 ?3711次閱讀

    vue+spring boot人員定位系統源碼,實現實時定位、智慧調度、軌跡追蹤

    、機具、物料上定位標簽回傳的位置信息數據,采用多維定位模式,精確定位人、機具、物料的實時位置,實現實時定位、物料標簽配置、智慧調度、軌跡追蹤、工時統計、區域物料統計、電子圍欄等應用功能。 技術架構:java+ spring boot+ v
    的頭像 發表于 08-08 14:27 ?877次閱讀
    vue+<b class='flag-5'>spring</b> <b class='flag-5'>boot</b>人員定位系統源碼,實現實時定位、智慧調度、軌跡追蹤

    玩轉Spring狀態機

    說起Spring狀態機,大家很容易聯想到這個狀態機和設計模式狀態模式的區別是啥呢?沒錯,Spring狀態機就是狀態模式的一種實現,介紹Sprin
    的頭像 發表于 06-25 14:21 ?1032次閱讀
    玩轉<b class='flag-5'>Spring</b>狀態機

    極空間上線“阿里云對象存儲OSS掛載”功能

    雖然與阿里云盤關聯密切,但值得注意的是,阿里云對象存儲 OSS 實質上是以對象形式存儲于 OSS 存儲空間內的內容。用戶若想使用 OSS,首先須創建 Bucket,詳設定 Bucket 的地域、訪問權限以及存儲類型等要素。
    的頭像 發表于 04-03 11:20 ?754次閱讀

    SpingBoot的5個擴展點,超級實用!

    我們啟動Spring Boot項目的時候,是執行這樣一個方法來啟動的
    的頭像 發表于 02-22 11:28 ?539次閱讀
    SpingBoot的5個擴展點,超級實用!
    主站蜘蛛池模板: 无夜精品久久久久久 | 欧美成人午夜 | 性色网站 | 国产乱码1卡一卡二卡 | 黄色免费在线视频 | 综合激情网五月 | 成人a毛片在线看免费全部播放 | 国产亚洲精品久久久久久牛牛 | 久久大综合 | 国产精品久久国产三级国不卡顿 | 丝袜美女被c | 五月婷婷激情六月 | 午夜啪视频 | 色屋视频| 天天干天天噜 | 色五月丁香五月综合五月 | 欧美日本一道免费一区三区 | 国产98色在线 | 经典三级一区二区三区视频 | 97久久草草超级碰碰碰 | 久久激情综合网 | 黄网站在线观看 | 免费又爽又黄禁片视频在线播放 | 在线看片你懂得 | 免费抓胸吻胸激烈视频网站 | 国产又爽又黄又粗又大 | 亚洲国产丝袜精品一区杨幂 | 国产一级毛片外aaaa | 99综合色 | 成人a毛片手机免费播放 | 国产美女作爱全过程免费视频 | 日本特黄特黄刺激大片免费 | 五月天丁香婷婷开心激情五月 | 欧美人与zoxxxx另类 | 亚洲精品久久久久午夜三 | 天天翘夜夜洗澡天天做 | 欧美性网站 | 亚洲影视一区二区 | 日本黄色大片在线观看 | 日本特黄特色aaa大片免费欧 | 亚洲偷图色综合色就色 |