使用minio进行文件存储

MinIO是一个开源的分布式对象存储服务器,支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发,拥有轻量级、高性能、易部署等特点,并且可以自由选择底层存储介质。它基于Apache License 开源协议,兼容Amazon S3云存储接口。适合存储非结构化数据,如图片,音频,视频,日志等。

官网:MinIO | 用于AI的S3 & Kubernetes原生对象存储

目录

Linux安装minio

Window安装minio

后台代码实现上传文件到minio


Linux安装minio

这里使用docker部署

1.拉取镜像

docker pull quay.io/minio/minio

2.创建容器

docker run \
   -p 9000:9000 \
   -p 9090:9090 \
   --name minio \
   -v /mydata/data:/data \
   -e "MINIO_ROOT_USER=admin" \
   -e "MINIO_ROOT_PASSWORD=wsgxgxsw10" \
   -d \
   quay.io/minio/minio server /mydata/minio/data --console-address ":9090"

其中9090是客户端端口,9000是服务单端口,通过9090端口访问minio客户端,通过9000端口调用minio的API。

挂载的数据卷就是存放我们上传到minio上的文件。

注意,用户名的长度至少为3,密码的长度至少为8,不然容器会启动不了,使用docker logs minio(容器名称) 查看日志会报如下错误

Unable to validate credentials inherited from the shell environment: Invalid credentials
      > Please provide correct credentials
      HINT:
        Access key length should be at least 3, and secret key length at least 8 characters

然后访问9090端口,输入用户名和密码就可以登录minio的客户端

Window安装minio

1.下载MinIO。

访问 minio官方网站,选择适合Windows系统的64位版本进行下载。

2.准备存储文件夹。

在下载路径下,创建一个名为minioData的文件夹,用于存储MinIO上传的文件。

3.启动MinIO。

在命令提示符中,使用minio.exe文件启动MinIO服务器,命令格式为minio.exe server 存储文件夹路径,例如,如果将MinIO安装在D盘,则命令为minio.exe server D:\minioData。

4.访问MinIO控制台。

在浏览器中输入http://localhost:9000,这通常是MinIO的默认访问地址。使用默认的用户名和密码(均为minioadmin)登录。(为什么下面图片上端口不是9000?我也不太清楚,反正我输入的是localhost:9000,他自动就转到这个地址了)

完成这些步骤后,就可以在windows上使用MinIO进行文件存储和管理了。

后台代码实现上传文件到minio

先在minio中新建一个桶(也可以在代码中实现)

第一步,导入依赖

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

第二步,在配置文件中配置信息

minio:
  username: xxxx
  password: xxxx
  bucket: xxxx
  url: http://xxxxx:9000

第三步,编写工具类实现文件上传功能

@Component
@Slf4j
public class FileUploader {

    @Value("${minio.username}")
    private String username;

    @Value("${minio.password}")
    private String password;

    @Value("${minio.bucket}")
    private String bucketName;

    @Value("${minio.url}")
    private String url;




    /**
     * 上传文件
     * @param file
     */
    public String saveFile(MultipartFile file) {
        MinioClient minioClient =
                MinioClient.builder()
                        .endpoint(url)
                        .credentials(username, password)
                        .build();
        try {
            //判断桶是否存在
            boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if (!bucketExists){
            //如果不存在,就创建桶
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }
            //本地时间,具体到年、月、日
            String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            //加一个/表示创建一个文件夹
            String filename = time+"/"+file.getOriginalFilename();
            //上传
            minioClient.putObject(PutObjectArgs.builder().
                    bucket(bucketName).
                    object(filename).
                    stream(file.getInputStream(), file.getSize(), -1).
                    contentType(file.getContentType()).
                    build());

            //获取地址
            String resurl = minioClient.getPresignedObjectUrl(
                    GetPresignedObjectUrlArgs.builder()
                            .method(Method.GET)
                            .bucket(bucketName)
                            .object(filename)
                            .expiry(60 * 60) // URL 的有效期(秒)
                            .build()
            );
            log.info("文件上传成功,地址:{}",resurl);
            //返回地址
            return resurl;
        } catch (Exception e) {
            log.info("文件上传失败");
            e.printStackTrace();
        }
        return null;

    }

}

第四步,调用上面的文件上传方法即可

    @Resource
    private FileUploader fileUploader;

    @PostMapping("/test/upload")
    public Result testupload(MultipartFile file){
        String s = fileUploader.saveFile(file);
        return new Result(0,"文件上传成功","url:"+s);
    }

第五步,进行测试

到这里,使用minio进行文件管理就实现了。

  • 25
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java使用Minio存储文件可以通过Minio提供的Java SDK来实现。Minio是一个开源的分布式对象存储服务,可以用于存储和检索大量的数据,同时也支持并发上传、下载、合并、删除等操作。下面是一个使用Minio存储文件的示例代码: 1. 首先需要引入MinioJava SDK依赖: ``` <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>RELEASE.2021-06-17T22-56-34Z</version> </dependency> ``` 2. 创建Minio客户端并连接到Minio服务器: ``` String endpoint = "http://minio.example.com"; String accessKey = "ACCESS_KEY"; String secretKey = "SECRET_KEY"; MinioClient minioClient = new MinioClient.Builder() .endpoint(endpoint) .credentials(accessKey, secretKey) .build(); ``` 3. 创建一个存储桶(Bucket): ``` String bucketName = "java.minio.demo"; boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!bucketExists) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } ``` 4. 上传文件Minio服务器: ``` File file = new File("D:\DownUpLoadTempFiles\100元.jpg"); InputStream inputStream = new FileInputStream(file); String objectName = "100元.jpg"; minioClient.putObject(PutObjectArgs.builder() .bucket(bucketName) .object(objectName) .stream(inputStream, inputStream.available(), -1) .build()); ``` 5. 下载文件: ``` String objectName = "100元.jpg"; File file = new File("D:\DownUpLoadTempFiles\100元.jpg"); minioClient.downloadObject(DownloadObjectArgs.builder() .bucket(bucketName) .object(objectName) .filename(file.getAbsolutePath()) .build()); ``` 6. 删除文件: ``` String objectName = "100元.jpg"; minioClient.removeObject(RemoveObjectArgs.builder() .bucket(bucketName) .object(objectName) .build()); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值