写给大忙人看的 – Java中从MinIO服务器中下载文件(3)[通俗易懂]

写给大忙人看的 – Java中从MinIO服务器中下载文件(3)[通俗易懂]前面两章介绍了MinIO文件服务器的环境搭建,以及在Java中上传文件至MinIO文件服务器中,现在,一起来看下如何从MinIO文件服务器中下载文件吧1、获取文件对象我们在MinIO工具类中,获取文件对象的方法,即获取文件的输入流对象/***获取文件**@parambucketNamebucket名称*@paramobjectName文件名称*@return二进制流*/@SneakyThrowspublicInputStreamge

大家好,又见面了,我是你们的朋友全栈君。

前面两章介绍了 MinIO 文件服务器的环境搭建,以及在 Java 中上传文件至 MinIO 文件服务器中,现在,一起来看下如何从 MinIO 文件服务器中下载文件吧

1、获取文件对象

我们在 MinIO 工具类中,获取文件对象的方法,即获取文件的输入流对象

/** * 获取文件 * * @param bucketName bucket名称 * @param objectName 文件名称 * @return 二进制流 */
@SneakyThrows
public InputStream getObject(String bucketName, String objectName) { 
   
    return client.getObject(bucketName, objectName);
}
  • bucketName,是指存储桶的名称
  • objectName,是指文件的路径,即存储桶下文件的相对路径

例如,图片的地址为

http://127.0.0.1:9000/bucketName/20200806/1596681603481809.png

那么 objectName 就为

20200806/1596681603481809.png

2、下载文件

我们需要编写一个 API 来进行访问从而下载文件

/** * 获取文件 * * @param bucketName bucket名称 * @param objectName 文件名称 * @return 二进制流 */
@SneakyThrows
public InputStream getObject(String bucketName, String objectName) { 
   
    return client.getObject(bucketName, objectName);
}
/** * 下载文件 * * @param fileUrl 文件绝对路径 * @param response * @throws IOException */
@GetMapping("downloadFile")
public void downloadFile(String fileUrl, HttpServletResponse response) throws IOException { 
   
    if (StringUtils.isBlank(fileUrl)) { 
   
        response.setHeader("Content-type", "text/html;charset=UTF-8");
        String data = "文件下载失败";
        OutputStream ps = response.getOutputStream();
        ps.write(data.getBytes("UTF-8"));
        return;
    }
    try { 
   
        // 拿到文件路径
        String url = fileUrl.split("9000/")[1];
        // 获取文件对象
        InputStream object = minioUtils.getObject(MinioConst.MINIO_BUCKET, url.substring(url.indexOf("/") + 1));
        byte buf[] = new byte[1024];
        int length = 0;
        response.reset();
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(url.substring(url.lastIndexOf("/") + 1), "UTF-8"));
        response.setContentType("application/octet-stream");
        response.setCharacterEncoding("UTF-8");
        OutputStream outputStream = response.getOutputStream();
        // 输出文件
        while ((length = object.read(buf)) > 0) { 
   
            outputStream.write(buf, 0, length);
        }
        // 关闭输出流
        outputStream.close();
    } catch (Exception ex) { 
   
        response.setHeader("Content-type", "text/html;charset=UTF-8");
        String data = "文件下载失败";
        OutputStream ps = response.getOutputStream();
        ps.write(data.getBytes("UTF-8"));
    }
}

这里传入的参数 fileUrl 为文件的绝对路径,即可以直接访问的路径,还需要通过此路径,截取得到文件的相对路径(即去掉 IP 地址和端口,去掉存储桶名称的路径)

3、测试

通过访问 API

http://127.0.0.1/minio/downloadFile?fileUrl=http://127.0.0.1:9000/bucketName/20200806/1596681603481809.png

便能成功下载文件了

如您在阅读中发现不足,欢迎留言!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158221.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 1155功耗最低的cpu_英特尔超低功耗CPU

    1155功耗最低的cpu_英特尔超低功耗CPU【IT168评测】IvyBridge于北京时间4月24日0:00解禁了,这次Intel首次将3D晶体管工艺和22nm制程用于IVB,工艺提升晶体管变小的同时,还改进了处理器的微架构,尤其核芯显卡大幅提升。究竟工艺和制程对功耗有多大帮助,IVB的性能表现如何呢?请看IT168给您带来的IvyBridge处理器最高端型号i73770K评测。▲低功耗是亮点Intel第三代酷睿CPU评测在30…

  • 冒泡排序算法(Java)

    冒泡排序算法(Java)

  • 离心泵CAE_2_ICEM剖分网格_2_叶轮流道[通俗易懂]

    离心泵CAE_2_ICEM剖分网格_2_叶轮流道[通俗易懂]针对本科毕设中所涉及到的离心泵数值分析和性能计算,将用最简单粗暴的方法,讲解如何基于CFturbo、ICEM、FLUENT来开展离心泵水力设计和性能分析的计算机辅助(CAE)实现。离心泵的水力设计由CFturbo软件实现;网格剖分由ICEM软件实现;CFD数值计算由FLUENT软件实现;并验证设计值是否达到。这里是第二部分,ICEM软件实现离心泵过流通道的网格剖分,含叶轮流道、进口延伸段、蜗壳流道的网格剖分。由于三个流道分开来划分网格,所以分三部分来分别讲解,这里是第2篇,叶轮流道的网格剖分……

  • awvs14安装教程_amesim安装教程

    awvs14安装教程_amesim安装教程AWVS安装1.解压awvs14.zip的压缩包2.点击如图所示的程序进行安装,安装的过程可以更改安装路径(最好是全英文的),出现证书安装把证书也安装一下[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9IM7zsf-1636963924896)(C:\Users\Lenovo\Desktop\软件安装\awvs安装.assets\1636948268918.png)]3.点击如下图所示的程序,出现网页关闭即可[外链图片转存失败,源站可能有防盗链机制,建议将图片保存

  • 4种基站相关概念——宏基站、微基站、皮基站、飞基站

    根据3GPP组织的规则,无线基站分为4类,分别是宏基站、微基站、皮基站和飞基站。4种基站的区别如下表格所示:类型 单载波发射功率(20MHz带宽) 覆盖能力(覆盖半径) 名称 英文名 别称 宏基站 MacroSite 宏站 10W以上 200米以上 微基站 MicroSite 微站 500mW-10W 50~200米 皮基站 PicoSite 微微站 企业级小基站

  • pytorch笔记:04)resnet网络&解决输入图像大小问题「建议收藏」

    pytorch笔记:04)resnet网络&解决输入图像大小问题「建议收藏」因为torchvision对resnet18-resnet152进行了封装实现,因而想跟踪下源码(^▽^)首先看张核心的resnet层次结构图(图1),它诠释了resnet18-152是如何搭建的,其中resnet18和resnet34结构类似,而resnet50-resnet152结构类似。下面先看resnet18的源码图1resnet18首先是models.resnet18…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号