MinIO 上传的图片,打开链接默认是下载的问题
项目中使用MinIO作为文件服务器,上传图片,拿到链接后浏览器打开直接下载
我们想要的效果是打开链接后预览图片,而不是下载。
为什么有的图片链接在浏览器打开是预览显示内容,而有的则是直接下载?关键就在于Content-Type上
这就需要动动生锈的大脑思考了 …
关于的头部信息Content-Type
Content-Type: /octet-stream
/octet-stream 告诉浏览器这是一个附件,浏览器会直接进行下载,而不是预览,只有image/png或者image/jpeg这种的的才会进行预览,展示图片内容。
咱只需要将Content-Type修改为 image/jpeg就ok了。
服务器生成图片返回到前端可以在上设置content-type,但这个是上传到文件服务器MinIo,访问的直接是文件服务器,并不经过我们后台服务,应该怎么设置?
于是我去了MinIO的控制台,点击各种按钮,想找找有没有可以设置访问链接时头部设置的,然而并没有找到任何可以设置的东西… 头大呀,好不容易有了思路,又给浇灭了。
不过我相信总是有办法的,有句话说得好,办法总比苦难多嘛。
既然MinIO控制台不能设置,咱能不能在上传之前就指定呢? 想实现这一点,关键在于MinIO得支持呀。
所以呢就去上传方法那里找了找,看有没有其它参数!
点一点,还真有,这不就是设置吗。 哈哈,终于找到解决方案了,开始码代码测试,最终呢测试有效,下面就是设置方法,各位看官仅供参考。
解决办法:
这里以MinIO上传为例,直接上代码:
/**
* 通过流上传文件
*
* @param bucketName 存储桶
* @param objectName 文件对象
* @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;
}
}
.(.()) 是核心,在上传直接设置content-type就可以了。
QQ上的链接无法打开
QQ上的链接无法打开的解决办法:选择一个常用的浏览器设置为默认浏览器就可以啦。
设置默认浏览器步骤如下:
1、Windows XP系统点击左下角-开始–控制面板–添加或删除程序–(左侧)设定程序访问和默认值–选择自定义,点击右侧下拉选项打开–选择一个默认的浏览器–“使用当前的浏览器”选上,同时在需要使用的浏览器后面选上“启用对程序的访问”。
1、如果装了ie浏览器,也可以这样设置:打开ie浏览器—打开菜单栏上的“工具”选项–选项–程序–默认的浏览器–将 浏览器设置为默认值。借助第三方软件修复方法/步骤:打开“360安全卫士” —“系统修复—点击“电脑门诊”—“常用软件”第二页,然后点击立即修复“QQ面板链接打不开”选项,点“立即修复”即可。
其他解决方法:
出现此情况,是由于安装过不同的浏览器或者浏览器被劫持(病毒木马导致),使用链接无法识别默认浏览器导致。
1、尝试清空IE缓存;(操作方法:打开浏览器,点击“工具”->“选项”->“删除Cookies”和“清除历史记录”,再点击“确定”即可)
2、把使用的浏览器设为默认浏览器;(操作方法:以TT浏览器为例,打开TT浏览器,点击“工具”->“TT选项”->“综合设置”->“默认浏览器”中选中“TT浏览器”点击“保存”即可)
3、若通过以上方法仍无法成功,请尝试重新下载QQ软件,下载地址: 。
A、可先将之前的QQ版本卸载(请先做好聊天等记录备份,以免丢失)——再重启计算机——重新下载官方网站 提供的QQ最新版本——安装到与之前QQ版本不同的路径;
B、请登录 下载新版的TT浏览器,并将其设置为默认浏览器使用(设置方法为:打开TT浏览器后的上方“工具”--TT选项--综合设置--选择“Tencent ”为默认浏览器即可);
C、请退出QQ后重新登录,再从QQ客户端进入QQ空间查看。
*请认真填写需求信息,我们会在24小时内与您取得联系。