Java使用minio上传下载文件

本文介绍了如何在Java项目中使用JDK1.8和Minio库进行文件上传、下载操作,包括本地文件、文件流和MultipartFile的处理,并提到了如何在application.yml中配置大文件上传的内存限制。
摘要由CSDN通过智能技术生成

 这里我选用的JDK1.8

一、导入依赖

<dependency>
   <groupId>io.minio</groupId>
   <artifactId>minio</artifactId>
   <version>8.2.2</version>
</dependency>

二、导入工具类

注意:这个工具类所有上传的文件和下载的文件都是基于配置的 bucketName 这一个桶的文件,

        使用之前需要配置自己的 endpoint、bucketName、accessKey、secretKey

import io.minio.*;
import java.util.UUID;

public class FileUpload {
    
    // minio部署的地址
    private static String endpoint="http://192.168.31.208:5000";
    // 桶名
    private static String bucketName="minio-test";
    // access key
    private static String accessKey="minio-test";
    // secret key
    private static String secretKey="minio-test";

    /**
     *	本地上传
     * @param fileName 本地要上传的文件名
     */
    public static String upload(String fileName)throws Exception{
        // 1. 拿到minio客户端
        MinioClient minioClient= MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey,secretKey)
                .build();

        // 2. 判断bucket是否存在
        if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        }
        String minioFileName = UUID.randomUUID() +fileName.substring(fileName.lastIndexOf("."));
        try {
            minioClient.uploadObject(UploadObjectArgs.builder()
                    .object(minioFileName)
                    .filename(fileName)
                    .bucket(bucketName)
                    .build());
        }catch (Exception e){
            e.printStackTrace();
            System.out.println(fileName+" 上传失败");
            return null;
        }
        System.out.println(fileName+" 上传成功!");
        String url=endpoint+"/"+bucketName+"/"+minioFileName;
        return url;
    }
    
    /**
     * 	文件流上传	支持非本地上传
     * @param fileInputStream 要上传文件的输入流
     * @param minioFileName 推送到minio之后的名称
     * @return
     */
    public static String upload(InputStream fileInputStream, String minioFileName){
        // 1. 拿到minio客户端
        MinioClient minioClient= MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey,secretKey)
                .build();

        // 2. 判断bucket是否存在,若不存在,则创建bucket
        try {
            if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }
        }catch (Exception e) {
            e.printStackTrace();
        };

        // 3. 上传文件
        try {

            minioClient.putObject(PutObjectArgs.builder()
                            .object(minioFileName)
                            .bucket(bucketName)
                            .stream(fileInputStream, fileInputStream.available(), -1)
                    .build());
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("上传失败");
            return null;
        }
        String url=endpoint+"/"+bucketName+"/"+minioFileName;
        return url;
    }
    
    /**
     *		MultipartFile 文件上传 		支持非本地上传
     * @param multipartFile 要上传的文件
     * @param minioFileName 要上传到minio的文件名
     * @return
     */
    public static String upload(MultipartFile multipartFile, String minioFileName){
        String url=null;
        try {
            url = upload(multipartFile.getInputStream(),minioFileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return url;
    }
    
     /**
     *	MultipartFile 文件上传 		支持非本地上传
     * @param multipartFile 要上传的文件
     */
    public static String upload(MultipartFile multipartFile){
        String url=null;
        try {
            String minioFileName = UUID.randomUUID() + multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
            url = upload(multipartFile.getInputStream(),minioFileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return url;
    }
    
    /**
     *	下载到本地
     * @param downloadFileName 将要从minio的桶中下载的文件名
     * @param toLocalFileName   下载到当地的某个位置(带路径的文件全名)
     */
    public static void download(String downloadFileName,String toLocalFileName) {
        // 1.创建minio客户端
        MinioClient minioClient = MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey,secretKey)
                .build();

        // 2.判断桶是否存在
        try {
            if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())){
                System.out.println(bucketName+" 这个桶不存在!");
                return;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 

        // 3.下载文件
        try {
            minioClient.downloadObject(DownloadObjectArgs.builder()
                    .bucket(bucketName).object(downloadFileName).filename(toLocalFileName)
                    .build());
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("下载失败!");
        }
    }
}

三、在application.yml文件里添加配置

 上传视频时,有的视频内存过大,需要在配置文件中配置最大文件内存上限

spring:
  servlet:
    multipart:
      max-file-size: 100MB		# 文件的最大尺寸100MB
      max-request-size: 100MB	# 单次请求可以接收文件的最大尺寸为100MB,一般上传视频时会用到
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用MinIO Java客户端来实现文件上传和下载。MinIO是一个基于对象存储的开源项目,可以提供高性能的文件存储和访问。 首先,你需要在你的Java项目中添加MinIO Java客户端的依赖。你可以在Maven或者Gradle配置文件中加入以下依赖: Maven: ```xml <dependencies> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.1.0</version> </dependency> </dependencies> ``` Gradle: ```groovy dependencies { implementation 'io.minio:minio:8.1.0' } ``` 接下来,你需要连接到MinIO服务器并进行认证。你可以使用以下代码完成: ```java import io.minio.MinioClient; public class MinioExample { public static void main(String[] args) { try { // 创建MinIO客户端对象 MinioClient minioClient = new MinioClient("http://your-minio-server-url", "access-key", "secret-key"); // 检查存储桶是否存在,如果不存在则创建 boolean isExist = minioClient.bucketExists("your-bucket"); if (!isExist) { minioClient.makeBucket("your-bucket"); } // 上传文件 minioClient.putObject("your-bucket", "your-object-name", "/path/to/your-file"); // 下载文件 minioClient.getObject("your-bucket", "your-object-name", "/path/to/save-file"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,你需要替换以下参数: - `your-minio-server-url`:MinIO服务器的URL地址。 - `access-key`:你的MinIO访问密钥。 - `secret-key`:你的MinIO密钥。 - `your-bucket`:存储桶的名称。 - `your-object-name`:对象的名称。 - `/path/to/your-file`:待上传的文件路径。 - `/path/to/save-file`:下载文件保存的路径。 通过上述代码,你可以使用MinIO Java客户端实现文件上传和下载。希望对你有帮助!如有任何问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值