一. Docker拉取镜像(确保自己的服务器已经安装Docker)
docker pull minio/minio
二. 启动一个miniio容器
docker run --name minio -p 9090:9000 -p 9999:9999 -d \ --restart=always -e \ "MINIO_ROOT_USER=minio" \ -e "MINIO_ROOT_PASSWORD=minio123" \ -v /home/minio/data:/data \ -v /home/minio/config:/root/.minio minio/minio server /data --console-address '0.0.0.0:9999'
账号是minio; 密码是minio123
三. 访问minio管理界面
端口9090或9999(确保在服务器放行相关端口即可访问)
点击 create a Bucket 创建一个bucket(桶), 这里的Bucket 我们可以理解为文件存储的目录
输入 bucket name ,点击create bucket 。可以通过 upload 上传文件到bucket中。
四. Java 上传文件到minio
-
导入依赖
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>7.1.0</version> </dependency>
2.测试类(需要输入自己的账号密码和IP)
import io.minio.MinioClient; import io.minio.ObjectWriteResponse; import io.minio.PutObjectArgs; import io.minio.errors.MinioException; import java.io.File; import java.io.FileInputStream; /** * @author lqs * @date 2022/11/18 9:53 */ public class MinioTest { public static void main(String[] args) throws Exception { try { // 构建一个Minio客户端 MinioClient minioClient = MinioClient.builder() //创建容器时指定的账号 .credentials("账号", "密码") //上传地址 .endpoint("http://IP:9090").build(); File file = new File("C:\\Users\\coderyeah\\Desktop\\welt.jpg"); PutObjectArgs putObjectArgs = PutObjectArgs.builder() .object("welt.jpg") //文件名 .contentType("image/jpeg") //文件类型 .bucket("bucket-test") //存储目录名 .stream(new FileInputStream(file), file.length(), -1).build(); //文件流,以及大小,-1代表不分片 //执行上传 ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs); System.out.println("上传结果 " + objectWriteResponse); //上传之后的文件地址是: String filePath = "http://IP:9090/bucket-test/welt.jpg"; } catch (MinioException e) { System.out.println("Error occurred: " + e); } } }
package com.test.FileUploadUtils; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.LocalDateTimeUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import io.minio.MinioClient; import io.minio.PutObjectArgs; import io.minio.errors.MinioException; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; /** * 文件上传到minio服务器 * * @author doubleflower * @date 2023-05-25 */ @Service @Slf4j public class FileUploadUtils { @Resource private Sms2Config sms2Config; @Value("${sign.key}") private String signKey; @Value("${minio.endpoint}") private String endpoint; @Value("${minio.port}") private String port; @Value("${minio.accessKey}") private String accessKey; @Value("${minio.secretKey}") private String secretKey; @Value("${minio.bucketName}") private String bucketName; /** * 文件上传 * * @param multipartFile * @return */ @Override public String upload(MultipartFile multipartFile) throws IOException { String fileUrl = null; InputStream inputStream = null; File file = null; try { // 创建临时文件 file = File.createTempFile("temp", null); // 把multipartFile写入临时文件 multipartFile.transferTo(file); // 使用文件创建 inputStream 流 inputStream = new FileInputStream(file); // 构建一个Minio客户端 MinioClient minioClient = MinioClient.builder() //创建容器时指定的账号 .credentials(accessKey, secretKey) //上传地址 .endpoint(endpoint + ":" + port).build(); String fileName = multipartFile.getOriginalFilename(); String objectName = new SimpleDateFormat("yyyy/MM/dd/").format(new Date()) + UUID.randomUUID().toString().replaceAll("-", "") + fileName.substring(fileName.lastIndexOf("."));
// 获取文件类型
String contentType=multipartFile.getContentType(); PutObjectArgs putObjectArgs = PutObjectArgs.builder() .object(objectName) .contentType(contentType) .bucket(bucketName) .stream(inputStream, file.length(), -1).build(); //执行上传 minioClient.putObject(putObjectArgs); //上传之后的文件地址是: fileUrl = endpoint + ":" + port + "/" + bucketName + "/" + objectName; } catch (MinioException e) { System.out.println("Error occurred: " + e); } catch (IOException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } finally { // 最后记得删除文件 file.deleteOnExit(); // 关闭流 inputStream.close(); } return fileUrl; } }
五. 配置权限
如果我们需要我们上传的文件可以被匿名用户访问,那么需要添加访问权限:找到文件存储目录,点击manager
然后找到access Rules添加访问规则如下:
然后再访问路径:http://IP:PORT/bucket-test/welt.jpg
标签:文件,存储,java,minio,bucket,io,import,String From: https://www.cnblogs.com/doubleflower/p/17435417.html