解決阿里云OSS使用URL無法訪問圖片的兩種方法
一、問題概述:
1、使用URL訪問OSS存儲(chǔ)的圖片時(shí)顯示XML代碼
2、使用URL訪問OSS存儲(chǔ)的圖片時(shí)自動(dòng)下載
二、解決方式:
如果大家對(duì)HTTP頭部?jī)?nèi)容不清晰的可以去百度了解一下再看
解決問題一:
問題一出現(xiàn)的原因:因?yàn)樵贠SS的Bucket權(quán)限設(shè)置為私有
解決方式:將Bucket權(quán)限設(shè)置為公共讀即可。但是我猜你之后多半會(huì)遇到第二個(gè)問題,那么就來解決第二個(gè)問題。
解決問題二:
問題二出現(xiàn)的原因:沒有對(duì)HTTP頭進(jìn)行設(shè)置,但是在阿里云2020年新發(fā)布的通知中需要自定義域名,使用默認(rèn)域名時(shí)為下載,設(shè)置了inline貌似也不管用。
可以參考文檔:https://help.aliyun.com/knowledge_detail/39545.html#ZkKEz
解決方式:
解決方式有兩種。如果圖片內(nèi)容較少或不再進(jìn)行增加時(shí)可以直接在OSS控制臺(tái)進(jìn)行設(shè)置。
解決方式一 如圖:


解決方式二:JavaSDK解決方式
使用SDK中的ObjectMetadata類進(jìn)行HTTP頭設(shè)置。在上傳文件時(shí)進(jìn)行設(shè)置
具體代碼:
將ContentDisposition設(shè)置為inline即可
// Endpoint以杭州為例,其它Region請(qǐng)按實(shí)際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主賬號(hào)AccessKey擁有所有API的訪問權(quán)限,風(fēng)險(xiǎn)很高。強(qiáng)烈建議您創(chuàng)建并使用RAM賬號(hào)進(jìn)行API訪問或日常運(yùn)維,請(qǐng)登錄 https://ram.console.aliyun.com 創(chuàng)建RAM賬號(hào)。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String content = "Hello OSS";
// 創(chuàng)建上傳文件的元信息,可以通過文件元信息設(shè)置HTTP header。
ObjectMetadata meta = new ObjectMetadata();
String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
// 開啟文件內(nèi)容MD5校驗(yàn)。開啟后OSS會(huì)把您提供的MD5與文件的MD5比較,不一致則拋出異常。
meta.setContentMD5(md5);
// 指定上傳的內(nèi)容類型。內(nèi)容類型決定瀏覽器將以什么形式、什么編碼讀取文件。如果沒有指定則根據(jù)文件的擴(kuò)展名生成,如果沒有擴(kuò)展名則為默認(rèn)值application/octet-stream。
meta.setContentType("text/plain");
// 設(shè)置內(nèi)容被下載時(shí)的名稱。
meta.setContentDisposition("attachment; filename=\"DownloadFilename\"");
// 設(shè)置上傳文件的長(zhǎng)度。如超過此長(zhǎng)度,則會(huì)被截?cái)?,為設(shè)置的長(zhǎng)度。如不足,則為上傳文件的實(shí)際長(zhǎng)度。
meta.setContentLength(content.length());
// 設(shè)置內(nèi)容被下載時(shí)網(wǎng)頁的緩存行為。
meta.setCacheControl("Download Action");
// 設(shè)置緩存過期時(shí)間,格式是格林威治時(shí)間(GMT)。
meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
// 設(shè)置內(nèi)容被下載時(shí)的編碼格式。
meta.setContentEncoding("utf-8");
// 設(shè)置header。
meta.setHeader("<yourHeader>", "<yourHeaderValue>");
// 創(chuàng)建OSSClient實(shí)例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 上傳文件。
ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta);
// 關(guān)閉OSSClient。
ossClient.shutdown();
參考阿里云官方文檔:https://help.aliyun.com/document_detail/84840.html
到此這篇關(guān)于解決阿里云OSS使用URL無法訪問圖片的兩種方法的文章就介紹到這了,更多相關(guān)阿里云OSS URL無法訪問內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- php版阿里云OSS圖片上傳類詳解
- Vue.js上傳圖片到阿里云OSS存儲(chǔ)的方法示例
- thinkPHP簡(jiǎn)單導(dǎo)入和使用阿里云OSSsdk的方法
- Laravel中使用阿里云OSS Composer包分享
- SpringBoot集成阿里云OSS圖片上傳
- yii2.0整合阿里云oss的示例代碼
- Nginx 代理轉(zhuǎn)發(fā)阿里云OSS上傳的實(shí)現(xiàn)代碼
- Thinkphp整合阿里云OSS圖片上傳實(shí)例代碼
- django 配置阿里云OSS存儲(chǔ)media文件的例子
- 關(guān)于阿里云oss獲取sts憑證 app直傳 python的實(shí)例
相關(guān)文章
永久解決 Intellij idea 報(bào)錯(cuò):Error :java 不支持發(fā)行版本5的問題
這篇文章主要介紹了永久解決 Intellij idea 報(bào)錯(cuò):Error :java 不支持發(fā)行版本5的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
方法參數(shù)屬性params,@PathVariable和@RequestParam用法及區(qū)別
這篇文章主要介紹了方法參數(shù)屬性params,@PathVariable和@RequestParam用法及區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Java實(shí)戰(zhàn)寵物店在線交易平臺(tái)的實(shí)現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+Springboot+maven+Mysql+FreeMarker實(shí)現(xiàn)一個(gè)寵物在線交易系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2022-01-01
java實(shí)現(xiàn)Spring在XML配置java類的方法
下面小編就為大家?guī)硪黄猨ava實(shí)現(xiàn)Spring在XML配置java類的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11

