Java中文件上传下载 --使用Minio

Minio模板类:

@RequiredArgsConstructorpublic class MinioTemplate implements InitializingBean {   private final String endpoint;   private final String accessKey;   private final String secretKey;   private MinioClient client;

   /**    * 创建bucket    *    * @param bucketName bucket名称    */   @SneakyThrows   public void createBucket(String bucketName) {      if (!client.bucketExists(bucketName)) {         client.makeBucket(bucketName);      }   }

   /**    * 获取全部bucket    * <p>    * https://docs.minio.io/cn/java-client-api-reference.html#listBuckets    */   @SneakyThrows   public List<Bucket> getAllBuckets() {      return client.listBuckets();   }

   /**    * 根据bucketName获取信息    * @param bucketName bucket名称    */   @SneakyThrows   public Optional<Bucket> getBucket(String bucketName) {      return client.listBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst();   }

   /**    * 根据bucketName删除信息    * @param bucketName bucket名称    */   @SneakyThrows   public void removeBucket(String bucketName) {      client.removeBucket(bucketName);   }

   /**    * 根据文件前置查询文件    *    * @param bucketName bucket名称    * @param prefix     前缀    * @param recursive  是否递归查询    * @return MinioItem 列表    */   @SneakyThrows   public List<MinioItem> getAllObjectsByPrefix(String bucketName, String prefix, boolean recursive) {      List<MinioItem> objectList = new ArrayList<>();      Iterable<Result<Item>> objectsIterator = client            .listObjects(bucketName, prefix, recursive);

      while (objectsIterator.iterator().hasNext()) {         objectList.add(new MinioItem(objectsIterator.iterator().next().get()));      }      return objectList;   }

   /**    * 获取文件外链    *    * @param bucketName bucket名称    * @param objectName 文件名称    * @param expires    过期时间 <=7    * @return url    */   @SneakyThrows   public String getObjectURL(String bucketName, String objectName, Integer expires) {      return client.presignedGetObject(bucketName, objectName, expires);   }

   /**    * 获取文件    *    * @param bucketName bucket名称    * @param objectName 文件名称    * @return 二进制流    */   @SneakyThrows   public InputStream getObject(String bucketName, String objectName) {      return client.getObject(bucketName, objectName);   }

   /**    * 上传文件    *    * @param bucketName bucket名称    * @param objectName 文件名称    * @param stream     文件流    * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject    */   public void putObject(String bucketName, String objectName, InputStream stream) throws Exception {      client.putObject(bucketName, objectName, stream, stream.available(), "application/octet-stream");   }

   /**    * 上传文件    *    * @param bucketName  bucket名称    * @param objectName  文件名称    * @param stream      文件流    * @param size        大小    * @param contextType 类型    * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject    */   public void putObject(String bucketName, String objectName, InputStream stream, long size, String contextType) throws Exception {      client.putObject(bucketName, objectName, stream, size, contextType);   }

   /**    * 获取文件信息    *    * @param bucketName bucket名称    * @param objectName 文件名称    * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#statObject    */   public ObjectStat getObjectInfo(String bucketName, String objectName) throws Exception {      return client.statObject(bucketName, objectName);   }

   /**    * 删除文件    *    * @param bucketName bucket名称    * @param objectName 文件名称    * @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#removeObject    */   public void removeObject(String bucketName, String objectName) throws Exception {      client.removeObject(bucketName, objectName);   }

   @Override   public void afterPropertiesSet() throws Exception {      Assert.hasText(endpoint, "Minio url 为空");      Assert.hasText(accessKey, "Minio accessKey为空");      Assert.hasText(secretKey, "Minio secretKey为空");      this.client = new MinioClient(endpoint, accessKey, secretKey);   }

文件上传方法:
public String upload(@RequestParam("file") MultipartFile file) {    String fileName  = file.getOriginalFilename();    Map<String, String> resultMap = new HashMap<>(4);    resultMap.put("bucketName", "bucketName");
    resultMap.put("fileName", fileName);    try {        minioTemplate.putObject("bucketName", fileName, file.getInputStream());

  } catch (Exception e) {
        return "上传失败";    }    return "上传成功";}

文件下载方法:
public void download(String fileName, HttpServletResponse response, HttpServletRequest request) {    String userAgent = request.getHeader("User-Agent");    String[] nameArray = StrUtil.split(fileName, "-");    try (InputStream inputStream = minioTemplate.getObject(nameArray[0], nameArray[1])) {        //解决乱码        if ( //IE 8 至 IE 10                userAgent.toUpperCase().contains("MSIE") ||                         //IE 11                        userAgent.contains("Trident/7.0")) {            fileName = java.net.URLEncoder.encode(nameArray[1], "UTF-8");        } else{            fileName = new String(nameArray[1].getBytes("UTF-8"),"iso-8859-1");        }        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);        response.setContentType("application/force-download");        response.setCharacterEncoding("UTF-8");        IoUtil.copy(inputStream, response.getOutputStream());    } catch (Exception e) {        log.error("文件读取异常", e);    }}


原文地址:https://www.cnblogs.com/youyouxiaosheng-lh/p/11026877.html

时间: 2024-12-08 01:58:02

Java中文件上传下载 --使用Minio的相关文章

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

linux中文件上传下载

windows篇 linux文件下载到windows sz命令 登录到linux服务器使用 sz log.log 命令,弹出对话框选择下载文件的目录,点击确定即可. windows文件上传到linux rz命令 登录到linux服务器使用rz命令,弹出文件选择对话框,选择windows本地的要上传的文件,点击打开即可上传文件到linux服务器. mac篇 linux文件下载到mac 使用scp命令 scp  [email protected]:/usr/local/nginx-1.14.0.ta

fastDFS与java整合文件上传下载

准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactI

Java中文件上传路径与路径修改相关问题(tomcat8.0+eclipse)

1.普通文件上传的路径: 通过getRealPath获取相关路径 String photoFolder =request.getServletContext().getRealPath("uploaded"); 打印文件路径可以得到路径就是下面这样,其实就是在工作空间下面 D:\javaWeb\workspaces\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\test\uploaded 但是如果部署项目的

JavaWeb实现文件上传下载功能实例解析 (好用)

转: 转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上

Retrofit2文件上传下载及其进度显示

序 前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示. 文件上传 定义接口 1 2 3 @Multipart @POST("fileService") Call<User> uploadFile(@Part MultipartBody.Part file); 构造请求体上传 1 2 3 4 5 File file = new File(filePath); RequestBod

28、java文件上传下载、邮件收发

文件上传下载 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: <input type="file" /> 3. 指定表单类型: 默认类型:enctype="application/x-www-form-urlencoded" 文件上传类型:multipart/form-data FileUpload 文件上传功能开发中比较常用,apache也提供了文件上传组件! FileUpload组件: 1. 下载源码 2. 项目中引入jar文件

C# 之 FTP服务器中文件上传与下载(三)

通过上一篇博客<C# 之 FTP服务器中文件上传与下载(二)>,我们已经实现将文件上传到我们创建的FTP服务器.今天我们就一起来看看怎么样实现从FTP服务器中下载我们所需要的文件.         我们想实现的效果是在页面上有一个超链接,超链接显示为我们想要下载的文件名.点击该文件名进入下载页面.首先我们在前台插入一个超链接,但是这个超链接为后台拼接的超链接. using System; using System.Collections.Generic; using System.Linq;

C# 之 FTP服务器中文件上传与下载(四)

        通过上一篇博客<C# 之 FTP服务器中文件上传与下载(三)>,我们已经实现将文件从我们创建的FTP服务器中下载到本地.今天就最后给大家讲解一下怎么对FTP中的文件进行重命名和删除操作. 首先在前台添加两个重命名和删除的按钮 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Defaul