解決springcloud阿里云OSS文件訪問(wèn)跨域問(wèn)題的實(shí)現(xiàn)
引言
最近在高德地圖中引用阿里云OSS存儲(chǔ)的圖片時(shí),出現(xiàn)跨域訪問(wèn)問(wèn)題,特此記錄,以方便后續(xù)同學(xué)參考
解決
1、在阿里云OSS后臺(tái)管理中,進(jìn)入權(quán)限管理,進(jìn)入跨域設(shè)置,添加跨域規(guī)則,設(shè)置來(lái)源為*
2、至此配置完成后訪問(wèn)圖片還是會(huì)出現(xiàn)跨域問(wèn)題,這是因?yàn)镺SS文件默認(rèn)會(huì)開(kāi)啟緩存,及后續(xù)訪問(wèn)的實(shí)際上是緩存的文件,這就會(huì)導(dǎo)致不能匹配到我們上述配置的跨域規(guī)則
于是我們需要將緩存禁用掉,如果文件就一兩個(gè)的話,可以直接在后臺(tái)中設(shè)置禁用緩存,將HTTP頭中Cache-Control
設(shè)置為no-cache
3、因?yàn)槟壳鞍⒗镌坪笈_(tái)只支持單個(gè)文件的HTTP頭設(shè)置,并不支持批量設(shè)置,所以到有多個(gè)文件或者后續(xù)上傳的文件都不需要緩存時(shí)就不能滿足了
那么我們?nèi)绾蝸?lái)實(shí)現(xiàn)這個(gè)批量禁用緩存的需求呢。答案就是在上傳文件到OSS的時(shí)候在請(qǐng)求頭中設(shè)置Cache-Control
為no-cache
首先上傳阿里云OSS的接口是基于aliyun-sdk-oss
依賴的
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> </dependency>
其次我們觀察該依賴包提供的上傳文件接口,會(huì)發(fā)現(xiàn)其中有一個(gè)方法可以設(shè)置ObjectMetadata
而ObjectMetadata
中是可以設(shè)置Header的
那么解決的方法就很清晰了,我們只需要在調(diào)用該文件上傳put
方法時(shí),在ObjectMetadata中設(shè)置上我們需要的Header即可,參考代碼如下:
private final OSSClient ossClient; @PostMapping("/put-file-with-nocache") public PutObjectResult putFileWithNoCache(@RequestParam MultipartFile file) { String fileName = file.getOriginalFilename(); ObjectMetadata metadata = new ObjectMetadata(); // 取消文件緩存,文件每次都會(huì)從OSS服務(wù)器獲取 metadata.setHeader("Cache-Control", "no-cache"); metadata.setHeader("Expires", "0"); PutObjectResult bucketName = ossClient.putObject("bucketName", fileName, file.getInputStream(), metadata); return bucketName; }
之后通過(guò)該接口上傳的圖片就不會(huì)再有跨域問(wèn)題了,我們?cè)跍y(cè)試工具中調(diào)用訪問(wèn)該圖片,也會(huì)發(fā)現(xiàn)其response中會(huì)多出一個(gè)cache-control: no-cache
的響應(yīng)頭了。
到此這篇關(guān)于解決springcloud阿里云OSS文件訪問(wèn)跨域問(wèn)題的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springcloud OSS文件跨域內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?Data?JPA框架的Repository自定義實(shí)現(xiàn)詳解
Spring?Data?JPA是Spring基于JPA規(guī)范的基礎(chǔ)上封裝的?套?JPA?應(yīng)?框架,可使開(kāi)發(fā)者?極簡(jiǎn)的代碼即可實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)和操作,本篇我們來(lái)了解Spring?Data?JPA框架的Repository自定義實(shí)現(xiàn)2022-04-04java實(shí)現(xiàn)識(shí)別二維碼圖片功能方法詳解與實(shí)例源碼
這篇文章主要介紹了java實(shí)現(xiàn)識(shí)別二維碼圖片,java無(wú)法識(shí)別二維碼情況下對(duì)二維碼圖片調(diào)優(yōu)功能方法與實(shí)例源碼,需要的朋友可以參考下2022-12-12Kafka Java Producer代碼實(shí)例詳解
這篇文章主要介紹了Kafka Java Producer代碼實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06mybatis3.3+struts2.3.24+mysql5.1.22開(kāi)發(fā)環(huán)境搭建圖文教程
這篇文章主要為大家詳細(xì)介紹了mybatis3.3+struts2.3.24+mysql5.1.22開(kāi)發(fā)環(huán)境搭建圖文教程,感興趣的小伙伴們可以參考一下2016-06-06Java Web項(xiàng)目中驗(yàn)證碼功能的制作攻略
使用servlet制作驗(yàn)證碼中最關(guān)鍵的部分是緩存的使用,驗(yàn)證session中的字符串,接下來(lái)我們就來(lái)看一下Java Web項(xiàng)目中驗(yàn)證碼功能的制作攻略2016-05-05關(guān)于kafka發(fā)送消息的三種方式總結(jié)
這篇文章主要介紹了關(guān)于kafka發(fā)送消息的三種方式總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04SpringBoot Maven升級(jí)自帶的jar包版本問(wèn)題
這篇文章主要介紹了SpringBoot Maven升級(jí)自帶的jar包版本問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07