写给大忙人看的 – 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

便能成功下载文件了

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android中常用的加密方式[通俗易懂]

    Android中常用的加密方式[通俗易懂]Android中常用的加密方式HmacSHA1publicstaticStringgetSignUtil(Stringkey,Stringbase){Log.i(TAG,”getSignUtil:GETSIGN”);Stringtype=”HmacSHA1″;SecretKeySpecsecret=newSecretKeySpec(key.getBytes(),type);Macmac=null;try{

    2022年5月13日
    27
  • 用Pandas 处理大数据的3种超级方法

    用Pandas 处理大数据的3种超级方法原文链接:3simplewaystohandlelargedatawithPandas作者|GeorgeSeif译者|jojoa易上手,文档丰富的Pandas已经成为时下最火的数据处理库。此外,Pandas数据处理能力也一流。其实无论你使用什么库,大量的数据处理起来往往回遇到新的挑战。数据处理时,往往会遇到没有足够内存(RAM)这个硬件问题。企业往往…

    2022年5月24日
    113
  • sim卡 热拔插_sim卡热插拔是什么

    sim卡 热拔插_sim卡热插拔是什么1.device/prize/pri6737t_66_m0/ProjectConfig.mk关闭:MTK_SIM_HOT_SWAP=no打开:MTK_SIM_HOT_SWAP=yes2.ker

    2022年8月5日
    7
  • python中imread什么意思_imwrite函数

    python中imread什么意思_imwrite函数Python中各种imread函数的区别与联系最近一直在用python做图像处理相关的东西,被各种imread函数搞得很头疼,因此今天决定将这些imread总结一下,以免以后因此犯些愚蠢的错误。如果你正好也对此感到困惑可以看下这篇总结。当然,要了解具体的细节,还是应该readthefuckcode和APIdocument,但貌似python的很多模块文档都不是很全,所以只能多看代码和注释

    2022年10月14日
    3
  • ue4材质节点介绍_C4D节点材质

    ue4材质节点介绍_C4D节点材质一.基础常量1.Constant快捷键:1+鼠标左键2.Constant2Vector快捷键:2+鼠标左键3.Constant3Vector快捷键:3+鼠标左键4.Constant4Vector快捷键:4+鼠标左键5.StaticBool6.TextureSample7.TestureObject8.ParticleSu…

    2022年10月5日
    7
  • influx数据同步「建议收藏」

    influx数据同步「建议收藏」经过测试,通过设置influxdb可以将多个influx数据库实时汇总到一台服务器的同一个数据库里。1、test_A数据库创建保留策略influx-execute“CREATESUBSCRIPTION“momServices_sub”ON“test_A”.“autogen”DESTINATIONSANY‘http://192.168.50.50:8086’”-database“Test_All”momServices_sub:同步规则名mom_services:要做数据同步的

    2025年7月28日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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