写给大忙人看的 – Java中从MinIO服务器中下载文件(3)[通俗易懂]
2023-06-13 09:12:33 时间
大家好,又见面了,我是你们的朋友全栈君。
前面两章介绍了 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.cn/158221.html原文链接:https://javaforall.cn
相关文章
- Java 异常错误 (Ljava/lang/String;)L java/lang/String;「建议收藏」
- Java删除文件(delete file in java)[通俗易懂]
- java 彻底删除文件_如何删除java文件「建议收藏」
- java删除文件目录及文件_Java删除文件,目录
- java pfx_如何在Java中读取.pfx文件的内容?
- java是面向对象还是面向过程_Java面向对象编程和面向过程编程的区别[通俗易懂]
- eclipse怎么导入java文件_Eclipse如何导入JAVA工程?如何将项目导入Eclipse中?
- Java中&和&&,|和||的区别(超详细讲解),细节请必会!
- yuicompressor java_使用YUICompressor自动压缩JavaWeb项目中的JS与CSS文件
- java获取服务器路径_JAVA获取服务器路径的方法「建议收藏」
- Java文件路径/服务器路径的获取
- java生成exe可执行文件的条件_不能运行exe文件
- java 文件上传到服务器_Java上传文件到服务器端的方法「建议收藏」
- Java 上传文件到ftp服务器「建议收藏」
- java 上传文件到服务器_ameqp服务器网址
- JAVA实验室设备管理系统代码_java做一个简单学生管理系统
- JAVA生成uuid_java接口default方法
- Java-定时任务调度技术 Quartz框架
- Java实现文件上传到服务器(FTP方式)详解编程语言
- Java远程登录Linux服务器入门指南(java远程linux)
- 服务器上的文件Java获取Linux服务器文件:简单又高效的操作方法(java获取linux)
- 服务器是否开机Java检查Linux服务器开机状态(java判断linux)
- 互操作Java与Redis缓存互操作实践(redis缓存与java)
- Linux下编译Java文件,迎来新体验(linux编译java文件)
- 编程玩转Java之Oracle编程实战(java中的oracle)
- java判断远程服务器上的文件是否存在的方法
- java实现服务器文件打包zip并下载的示例(边打包边下载)
- java实现两台服务器间文件复制的方法