整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

【MinIO 上传的图片,打开链接默认是下载的问题】

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空间查看。