Java 干貨公眾號粉絲福利,技術(shù) leader 教你如何將圖片保存到 OSS
新入職實習(xí)生小二,帶著熱忱與迷茫踏入職場,開啟了技術(shù)實習(xí)之旅。我受命向他傳授一項看似簡單的任務(wù)——將前端編輯器上傳的圖片存儲至服務(wù)器。出乎意料的是,他徑直將圖片存儲于服務(wù)器。此舉令我不禁懊惱,亦引發(fā)深思:在當(dāng)前技術(shù)環(huán)境下,是否仍有同行直接存儲圖像于服務(wù)器?正確做法應(yīng)是選用OSS或MinIO等對象存儲服務(wù)。
小二的初體驗:直接保存圖片到服務(wù)器
初級階段,操作員直接將客戶端提交的圖像存入服務(wù)器。盡管此方法簡便,卻顯露出其對存儲技術(shù)的理解局限。在網(wǎng)絡(luò)架構(gòu)現(xiàn)狀下,將圖像直接存入服務(wù)器,不僅效率欠佳且管理繁重。服務(wù)器應(yīng)專注于執(zhí)行業(yè)務(wù)邏輯,而非海量靜態(tài)內(nèi)容的存儲。此情況表明,該操作員迫切需要更多專業(yè)指導(dǎo)和知識積累。
導(dǎo)師的無奈與指導(dǎo):從服務(wù)器到OSS
在審閱小二作業(yè)時,我感到憤怒與沮喪。作業(yè)未能達(dá)到現(xiàn)代技術(shù)標(biāo)準(zhǔn),引發(fā)了我的不滿;考慮到他是新入行者,學(xué)習(xí)曲線漫長,我感到無力。因此,我決定親自指導(dǎo),逐步講解從圖片到對象存儲服務(wù)(OSS)的存儲步驟。OSS是阿里云提供的高效、安全存儲方案。通過采用OSS,我們能在云端有效保存靜態(tài)資源,既提高了存儲效率,又極大地簡化了管理流程。
小二的轉(zhuǎn)變:從懵懂到自信
在本指導(dǎo)下,小二逐步在SpringBoot應(yīng)用中集成OSS服務(wù)。通過阿里云官網(wǎng),他以“OSS”為關(guān)鍵詞搜索相關(guān)信息。隨后,創(chuàng)建了新的OSS存儲容器,并配置了公開讀權(quán)限,以便互聯(lián)網(wǎng)用戶瀏覽內(nèi)部圖片。盡管初期操作略顯新手,但小二展現(xiàn)出強(qiáng)烈的學(xué)習(xí)意愿和良好的適應(yīng)性。
????com.aliyun.oss
????aliyun-sdk-oss
????3.10.2
OSS的整合:從配置到上傳
aliyun:
??oss:
??????#?oss對外服務(wù)的訪問域名
????endpoint:?oss-cn-beijing.aliyuncs.com
??????#?訪問身份驗證中用到用戶標(biāo)識
????accessKeyId:?LTAI5
??????#?用戶用于加密簽名字符串和oss用來驗證簽名字符串的密鑰
????accessKeySecret:?RYN
??????#?oss的存儲空間
????bucketName:?itwanger-oss1
??????#?上傳文件大小(M)
????maxSize:?3
??????#?上傳文件夾路徑前綴
????dir:
??????prefix:?codingmore/images/
在部署集成對象存儲服務(wù)(OSS)流程之際,工程師首步運用Java配置類引入@Value注解,以此從配置文件中提取OSS配置數(shù)據(jù)。隨后,工程師編寫服務(wù)層代碼,確保了文件向OSS的上傳功能及其存儲路徑的提供。盡管過程復(fù)雜,工程師仍高效操作,順利將圖片上傳至OSS平臺。
@Configuration
public?class?OssClientConfig?{
????@Value("${aliyun.oss.endpoint}")
????String?endpoint?;
????@Value("${aliyun.oss.accessKeyId}")
????String?accessKeyId?;
????@Value("${aliyun.oss.accessKeySecret}")
????String?accessKeySecret;
????@Bean
????public?OSSClient?createOssClient()?{
????????return?(OSSClient)new?OSSClientBuilder().build(endpoint,?accessKeyId,?accessKeySecret);
????}
}
測試與驗證:從上傳到確認(rèn)
@Controller
@Api(tags?=?"上傳")
@RequestMapping("/ossController")
public?class?OssController?{
????@Autowired
????private?IOssService?ossService;
????@RequestMapping(value?=?"/upload",method=RequestMethod.POST)
????@ResponseBody
????@ApiOperation("上傳")
????public?ResultObject?upload(@RequestParam("file")?MultipartFile?file,?HttpServletRequest?req)??{
????????return?ResultObject.success(ossService.upload(file));
????}
}
完成OSS集成任務(wù)后,小二采用Postman對上傳接口進(jìn)行了細(xì)致檢驗,驗證圖片上傳無誤并獲取了正確鏈接。隨后,團(tuán)隊訪問阿里云OSS控制臺核實圖片成功上傳。這些檢驗步驟提升了小二的操作自信,同時展現(xiàn)了其技能的提升。
前端測試:從上傳到顯示
@Service
public?class?OssServiceImpl?implements?IOssService{
????@Value("${aliyun.oss.maxSize}")
????private?int?maxSize;
???
????@Value("${aliyun.oss.bucketName}")
????private?String?bucketName;
??
????@Value("${aliyun.oss.dir.prefix}")
????private?String?dirPrefix;
????
????@Autowired
????private?OSSClient?ossClient;???
????@Override
????public?String?upload(MultipartFile?file)?{
????????try?{
????????????return?upload(file.getInputStream(),?file.getOriginalFilename());
????????}?catch?(IOException?e)?{
????????????LOGGER.error(e.getMessage());
????????}
????????return?null;
????}
????@Override
????public?String?upload(InputStream?inputStream,String?name)?{
????????String?objectName?=?getBucketName(name);
????????//?創(chuàng)建PutObject請求。
????????ossClient.putObject(bucketName,?objectName,?inputStream);
????????return?formatPath(objectName);
????}
????private?String?getBucketName(String?url){
????????String?ext?=?"";
????????for(String?extItem:imageExtension){
????????????if(url.indexOf(extItem)?!=?-1){
????????????????ext?=?extItem;
????????????????break;
????????????}
????????}
????????return?dirPrefix+?DateUtil.today()+"/"+?IdUtil.randomUUID()+ext;
????}
????private?String?formatPath(String?objectName){
????????return?"https://"??+bucketName+"."+?ossClient.getEndpoint().getHost()?+?"/"?+?objectName;
????}
}??
為了全面評估開放源代碼系統(tǒng)(OSS)的集成效益,小二順利下載并激活了前端腳本及Web管理界面。在內(nèi)容編輯過程中,他選擇并上傳了圖片,驗證了圖片從前端至服務(wù)器的順暢傳輸,經(jīng)服務(wù)器處理后再上傳至OSS,最終生成了可供前端訪問的圖片鏈接。此過程的順利進(jìn)行提升了小二對操作方法的信心。
外鏈轉(zhuǎn)鏈:從外鏈到OSS
對OSS系統(tǒng)綜合集成完畢后,小二對外部鏈接轉(zhuǎn)換功能進(jìn)行了詳盡測試。他在Java類中拓展了圖片轉(zhuǎn)換至外部鏈接的功能,通過正則表達(dá)式識別文檔鏈接,并保存在OSS。隨后,他將圖片替換至原鏈接。Web管理端驗證確認(rèn),該轉(zhuǎn)換過程流暢,圖片顯示正常。
總結(jié)與展望:從實習(xí)到成長
在本次OSS集成項目中,小二不僅熟練掌握了將圖像上傳至OSS的操作,且精通了相關(guān)技術(shù)流程。面對挑戰(zhàn),其顯著進(jìn)步不言而喻。盡管OSS與CDN是理想的圖床組合,阿里云HTTPSCDN在個別情況下存在回源故障,影響圖片展示,這一缺陷亟待改進(jìn)。然而,此次實踐活動對小二的技術(shù)發(fā)展至關(guān)重要。
作者:小藍(lán)
鏈接:http://www.tymcc.com.cn/content/2710.html
本站部分內(nèi)容和圖片來源網(wǎng)絡(luò),不代表本站觀點,如有侵權(quán),可聯(lián)系我方刪除。