MinIO 上傳的圖片,打開(kāi)鏈接默認(rèn)是下載的問(wèn)題
項(xiàng)目中使用MinIO作為文件服務(wù)器,上傳圖片,拿到鏈接后瀏覽器打開(kāi)直接下載
我們想要的效果是打開(kāi)鏈接后預(yù)覽圖片,而不是下載。
為什么有的圖片鏈接在瀏覽器打開(kāi)是預(yù)覽顯示內(nèi)容,而有的則是直接下載?關(guān)鍵就在于Content-Type上
這就需要?jiǎng)觿?dòng)生銹的大腦思考了 …
關(guān)于的頭部信息Content-Type
Content-Type: /octet-stream
/octet-stream 告訴瀏覽器這是一個(gè)附件,瀏覽器會(huì)直接進(jìn)行下載,而不是預(yù)覽,只有image/png或者image/jpeg這種的的才會(huì)進(jìn)行預(yù)覽,展示圖片內(nèi)容。
咱只需要將Content-Type修改為 image/jpeg就ok了。
服務(wù)器生成圖片返回到前端可以在上設(shè)置content-type,但這個(gè)是上傳到文件服務(wù)器MinIo,訪問(wèn)的直接是文件服務(wù)器,并不經(jīng)過(guò)我們后臺(tái)服務(wù),應(yīng)該怎么設(shè)置?
于是我去了MinIO的控制臺(tái),點(diǎn)擊各種按鈕,想找找有沒(méi)有可以設(shè)置訪問(wèn)鏈接時(shí)頭部設(shè)置的,然而并沒(méi)有找到任何可以設(shè)置的東西… 頭大呀,好不容易有了思路,又給澆滅了。
不過(guò)我相信總是有辦法的,有句話說(shuō)得好,辦法總比苦難多嘛。
既然MinIO控制臺(tái)不能設(shè)置,咱能不能在上傳之前就指定呢? 想實(shí)現(xiàn)這一點(diǎn),關(guān)鍵在于MinIO得支持呀。
所以呢就去上傳方法那里找了找,看有沒(méi)有其它參數(shù)!
點(diǎn)一點(diǎn),還真有,這不就是設(shè)置嗎。 哈哈,終于找到解決方案了,開(kāi)始碼代碼測(cè)試,最終呢測(cè)試有效,下面就是設(shè)置方法,各位看官僅供參考。
解決辦法:
這里以MinIO上傳為例,直接上代碼:
/**
* 通過(guò)流上傳文件
*
* @param bucketName 存儲(chǔ)桶
* @param objectName 文件對(duì)象
* @param inputStream 文件流
*/
public ObjectWriteResponse uploadFile(String bucketName, String objectName, InputStream inputStream) throws Exception {
createBucket(bucketName);
return minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.contentType(ViewContentTypeEnum .getContentType(objectName))
.stream(inputStream, inputStream.available(), -1)

.build());
}
public enum ViewContentTypeEnum {
DEFAULT("default","application/octet-stream"),
PNG("png", "image/png"),
JPEG("jpeg", "image/jpeg"),
JPG("jpg", "image/jpeg"),
GIF("gif", "image/gif"),
WBMP("wbmp", "image/vnd.wap.wbmp"),
TIFF("tiff", "image/tiff"),
JFIF("jfif", "image/jpeg"),
TIF("tif", "image/tiff"),
FAX("fax", "image/fax"),
JPE("jpe", "image/jpeg"),
NET("net", "image/pnetvue"),
RP("rp", "image/vnd.rn-realpix"),
ICO("ico", "image/x-icon");
private String prefix;
private String type;
private static final Map<String, ViewContentTypeEnum> ENUM_MAP = new HashMap<>();
static {
ViewContentTypeEnum[] values = values();
for (ViewContentTypeEnum value : values) {
ENUM_MAP.put(value.getPrefix(), value);
}
}
public static String getTypeByPrefix(String prefix) {

ViewContentTypeEnum viewContentTypeEnum = ENUM_MAP.get(prefix);
if (viewContentTypeEnum == null) {
return prefix;
}
return viewContentTypeEnum.getType();
}
public static String getContentType(String prefix){
if(StringUtils.isEmpty(prefix)){
return DEFAULT.getType();
}
prefix = prefix.substring(prefix.lastIndexOf(".") + 1);
String type = getTypeByPrefix(prefix);
if (StringUtils.isNotEmpty(type)) {
return type;
}
return DEFAULT.getType();
}
ViewContentTypeEnum(String prefix, String type) {
this.prefix = prefix;
this.type = type;
}
public String getPrefix() {
return prefix;
}
public String getType() {
return type;
}
}
.(.()) 是核心,在上傳直接設(shè)置content-type就可以了。
QQ上的鏈接無(wú)法打開(kāi)
QQ上的鏈接無(wú)法打開(kāi)的解決辦法:選擇一個(gè)常用的瀏覽器設(shè)置為默認(rèn)瀏覽器就可以啦。
設(shè)置默認(rèn)瀏覽器步驟如下:
1、Windows XP系統(tǒng)點(diǎn)擊左下角-開(kāi)始–控制面板–添加或刪除程序–(左側(cè))設(shè)定程序訪問(wèn)和默認(rèn)值–選擇自定義,點(diǎn)擊右側(cè)下拉選項(xiàng)打開(kāi)–選擇一個(gè)默認(rèn)的瀏覽器–“使用當(dāng)前的瀏覽器”選上,同時(shí)在需要使用的瀏覽器后面選上“啟用對(duì)程序的訪問(wèn)”。
1、如果裝了ie瀏覽器,也可以這樣設(shè)置:打開(kāi)ie瀏覽器—打開(kāi)菜單欄上的“工具”選項(xiàng)–選項(xiàng)–程序–默認(rèn)的瀏覽器–將 瀏覽器設(shè)置為默認(rèn)值。借助第三方軟件修復(fù)方法/步驟:打開(kāi)“360安全衛(wèi)士” —“系統(tǒng)修復(fù)—點(diǎn)擊“電腦門診”—“常用軟件”第二頁(yè),然后點(diǎn)擊立即修復(fù)“QQ面板鏈接打不開(kāi)”選項(xiàng),點(diǎn)“立即修復(fù)”即可。
其他解決方法:
出現(xiàn)此情況,是由于安裝過(guò)不同的瀏覽器或者瀏覽器被劫持(病毒木馬導(dǎo)致),使用鏈接無(wú)法識(shí)別默認(rèn)瀏覽器導(dǎo)致。
1、嘗試清空IE緩存;(操作方法:打開(kāi)瀏覽器,點(diǎn)擊“工具”->“選項(xiàng)”->“刪除Cookies”和“清除歷史記錄”,再點(diǎn)擊“確定”即可)
2、把使用的瀏覽器設(shè)為默認(rèn)瀏覽器;(操作方法:以TT瀏覽器為例,打開(kāi)TT瀏覽器,點(diǎn)擊“工具”->“TT選項(xiàng)”->“綜合設(shè)置”->“默認(rèn)瀏覽器”中選中“TT瀏覽器”點(diǎn)擊“保存”即可)
3、若通過(guò)以上方法仍無(wú)法成功,請(qǐng)嘗試重新下載QQ軟件,下載地址: 。
A、可先將之前的QQ版本卸載(請(qǐng)先做好聊天等記錄備份,以免丟失)——再重啟計(jì)算機(jī)——重新下載官方網(wǎng)站 提供的QQ最新版本——安裝到與之前QQ版本不同的路徑;
B、請(qǐng)登錄 下載新版的TT瀏覽器,并將其設(shè)置為默認(rèn)瀏覽器使用(設(shè)置方法為:打開(kāi)TT瀏覽器后的上方“工具”--TT選項(xiàng)--綜合設(shè)置--選擇“Tencent ”為默認(rèn)瀏覽器即可);
C、請(qǐng)退出QQ后重新登錄,再?gòu)腝Q客戶端進(jìn)入QQ空間查看。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。